Datenrahmen in R zusammenführen: Vollständige und teilweise Übereinstimmung
Sehr oft verfügen wir über Daten aus mehreren Quellen. Um eine Analyse durchzuführen, müssen wir Folgendes tun fusionieren zwei Datenrahmen zusammen mit einem oder mehreren gemeinsame Schlüsselvariablen.
In diesem Tutorial lernst du
Gesamtes Spiel
Eine vollständige Übereinstimmung gibt Werte zurück, die ein Gegenstück in der Zieltabelle haben. Die nicht übereinstimmenden Werte werden im neuen Datenrahmen nicht zurückgegeben. Die teilweise Übereinstimmung gibt jedoch die fehlenden Werte als NA zurück.
Wir werden ein einfaches sehen innere Verbindung. Das Schlüsselwort „Inner Join“ wählt Datensätze aus, die in beiden Tabellen übereinstimmende Werte haben. Um zwei Datensätze zu verbinden, können wir die Funktion merge() verwenden. Wir werden drei Argumente verwenden:
merge(x, y, by.x = x, by.y = y) Arguments: -x: The origin data frame -y: The data frame to merge -by.x: The column used for merging in x data frame. Column x to merge on -by.y: The column used for merging in y data frame. Column y to merge on
Ejemplo:
Erstellen Sie den ersten Datensatz mit Variablen
- Familien-oder Nachname
- Staatsangehörigkeit
Erstellen Sie einen zweiten Datensatz mit Variablen
- Familien-oder Nachname
- Filme
Die gemeinsame Schlüsselvariable ist Nachname. Wir können beide Daten zusammenführen und prüfen, ob die Dimensionalität 7×3 beträgt.
Wir fügen stringsAsFactors=FALSE in den Datenrahmen ein, weil wir das nicht wollen R Um eine Zeichenfolge als Faktor umzuwandeln, möchten wir, dass die Variable als Zeichen behandelt wird.
# Create origin dataframe( producers <- data.frame( surname = c("Spielberg","Scorsese","Hitchcock","Tarantino","Polanski"), nationality = c("US","US","UK","US","Poland"), stringsAsFactors=FALSE) # Create destination dataframe movies <- data.frame( surname = c("Spielberg", "Scorsese", "Hitchcock", "Hitchcock", "Spielberg", "Tarantino", "Polanski"), title = c("Super 8", "Taxi Driver", "Psycho", "North by Northwest", "Catch Me If You Can", "Reservoir Dogs","Chinatown"), stringsAsFactors=FALSE) # Merge two datasets m1 <- merge(producers, movies, by.x = "surname") m1 dim(m1)
Ausgang:
surname nationality title 1 Hitchcock UK Psycho 2 Hitchcock UK North by Northwest 3 Polanski Poland Chinatown 4 Scorsese US Taxi Driver 5 Spielberg US Super 8 6 Spielberg US Catch Me If You Can 7 Tarantino US Reservoir Dogs
Lassen Sie uns Datenrahmen zusammenführen, wenn die gemeinsamen Schlüsselvariablen unterschiedliche Namen haben.
Im Filmdatenrahmen ändern wir den Nachnamen in den Vornamen. Wir verwenden die Funktion identisch(x1, x2), um zu prüfen, ob beide Datenrahmen identisch sind.
# Change name of ` movies ` dataframe colnames(movies)[colnames(movies) == 'surname'] <- 'name' # Merge with different key value m2 <- merge(producers, movies, by.x = "surname", by.y = "name") # Print head of the data head(m2)
Ausgang:
##surname nationality title ## 1 Hitchcock UK Psycho ## 2 Hitchcock UK North by Northwest ## 3 Polanski Poland Chinatown ## 4 Scorsese US Taxi Driver ## 5 Spielberg US Super 8 ## 6 Spielberg US Catch Me If You Can
# Check if data are identical identical(m1, m2)
Ausgang:
## [1] TRUE
Dies zeigt, dass der Zusammenführungsvorgang auch dann ausgeführt wird, wenn die Spaltennamen unterschiedlich sind.
Teilweise Übereinstimmung
Es ist nicht überraschend, dass zwei Datenrahmen nicht dieselben gemeinsamen Schlüsselvariablen haben. Im volle Übereinstimmung, der Datenrahmen kehrt zurück einzige Zeilen, die sowohl im x- als auch im y-Datenrahmen gefunden werden. Mit teilweises Zusammenführenist es möglich, die Zeilen ohne übereinstimmende Zeilen im anderen Datenrahmen beizubehalten. Diese Zeilen haben NA in den Spalten, die normalerweise mit Werten von y gefüllt sind. Das können wir erreichen, indem wir all.x= TRUE setzen.
Beispielsweise können wir einen neuen Produzenten, Lucas, im Produzentendatenrahmen hinzufügen, ohne die Filmreferenzen im Filmdatenrahmen. Wenn wir all.x= FALSE setzen, verknüpft R nur die übereinstimmenden Werte in beiden Datensätzen. In unserem Fall wird der Produzent Lucas nicht an der Zusammenführung teilnehmen, da er in einem Datensatz fehlt.
Sehen wir uns die Dimension jeder Ausgabe an, wenn wir all.x= TRUE angeben und wenn nicht.
# Create a new producer add_producer <- c('Lucas', 'US') # Append it to the ` producer` dataframe producers <- rbind(producers, add_producer) # Use a partial merge m3 <-merge(producers, movies, by.x = "surname", by.y = "name", all.x = TRUE) m3
Ausgang:
# Compare the dimension of each data frame dim(m1)
Ausgang:
## [1] 7 3
dim(m2)
Ausgang:
## [1] 7 3
dim(m3)
Ausgang:
## [1] 8 3
Wie wir sehen können, beträgt die Dimension des neuen Datenrahmens 8×3 im Vergleich zu 7×3 für m1 und m2. R schließt NA für den fehlenden Autor im Buchdatenrahmen ein.