Zwei Dataframe in R zusammenführen
-
Verwenden von
rbind
zum Kombinieren zweier Dataframe in R -
Verwendung von das
dplyr
-Paket - Kombinieren von großen Dataframes in R
Wenn wir Daten mit R-Code manipulieren, stehen wir oft vor der Notwendigkeit, zwei Dataframe zu einem zu kombinieren. In diesem Tutorial werden wir uns einige Methoden ansehen, um zwei Dataframes in R effizient zu kombinieren.
Angenommen, Sie haben zwei Dataframe, x
und y
, mit einigen übereinstimmenden Spalten. Zum Beispiel:
x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))
Und Sie müssen sie zu einem resultierenden Dataframe kombinieren, der zum Beispiel z
heißt. Solche Dataframe könnten wie diese aussehen:
Verwenden von rbind
zum Kombinieren zweier Dataframe in R
Die Funktion rbind
kombiniert Datenstrukturen, wie z. B. Dataframe, Vektoren oder Matrizen, zeilenweise. Ihr Name steht für row-bind.
Wenn Sie rbind
verwenden, um zwei Dataframe zu kombinieren, müssen beide Dataframe die gleichen Spalten haben. Daher müssen Sie im vorherigen Beispiel die Spalte b
zum Dataframe y
hinzufügen. Dies kann durch Ausführen dieses Befehls geschehen:
y$b <- NA
Nun sollte der Dataframe y
wie folgt aussehen:
Nun können Sie rbind
verwenden, um die Dataframe x
und y
zu dem neuen Dataframe z
zu kombinieren, indem Sie diesen Befehl ausführen:
x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))
y$b <- NA
z <- rbind(x, y)
Ausgabe:
a b c
1 218 25 950
2 415 19 872
3 339 43 645
4 309 NA 799
5 115 NA 814
Verwendung von das dplyr
-Paket
Wenn Sie keine zusätzliche Zeile Code schreiben oder fiktive Spalten zu einem der Dataframe hinzufügen wollen, nur um rbind
verwenden zu können, können Sie das Paket dplyr
installieren und dann einfach verwenden:
z <- bind_rows(x, y)
Es füllt den Dataframe z
mit der Kombination aus x
und y
.
Kombinieren von großen Dataframes in R
Die vorherigen Beispiele funktionieren gut mit kleinen Dataframe mit ein paar Zeilen und 2 oder 3 Spalten. Aber wenn Sie große Datensätze mit vielen Zeilen und einer beliebigen Anzahl von Spalten zusammenführen müssen, könnte es besser sein, eine Funktion zu schreiben, die diese Aufgabe schneller erledigt, wie die folgende:
quickmerge <- function(df1, df2) {
df1.names <- names(df1)
df2.names <- names(df2)
df2.add <- setdiff(df1.names, df2.names)
df1.add <- setdiff(df2.names, df1.names)
if(length(df2.add) > 0) {
for(i in 1:length(df2.add)) {
df2[df2.add[i]] <- NA
}
}
if(length(df1.add) > 0) {
for(i in 1:length(df1.add)) {
df1[df1.add[i]] <- NA
}
}
return(rbind(df1, df2))
}
Diese Funktion beginnt mit dem Vergleich der Spaltennamen in den Dataframe und fügt dann die notwendigen Spalten hinzu, um sie gleich zu machen. Schließlich verwendet sie die Funktion rbind
, um die Zeilen zu kombinieren und das Ergebnis zurückzugeben. Um die Funktion aufzurufen, verwenden Sie:
z <- quickmerge(x, y)
Der vollständige Beispielcode lautet wie folgt.
quickmerge <- function(df1, df2) {
df1.names <- names(df1)
df2.names <- names(df2)
df2.add <- setdiff(df1.names, df2.names)
df1.add <- setdiff(df2.names, df1.names)
if(length(df2.add) > 0) {
for(i in 1:length(df2.add)) {
df2[df2.add[i]] <- NA
}
}
if(length(df1.add) > 0) {
for(i in 1:length(df1.add)) {
df1[df1.add[i]] <- NA
}
}
return(rbind(df1, df2))
}
x <- data.frame(a=c(218, 415, 339), b=c(25, 19, 43), c=c(950, 872, 645))
y <- data.frame(a=c(309, 115), c=c(799, 814))
z <- quickmerge(x, y)
print(z)
Ausgabe:
a b c
1 218 25 950
2 415 19 872
3 339 43 645
4 309 NA 799
5 115 NA 814