Zwei Dataframe in R zusammenführen

Gustavo du Mortier 30 Januar 2023
  1. Verwenden von rbind zum Kombinieren zweier Dataframe in R
  2. Verwendung von das dplyr-Paket
  3. Kombinieren von großen Dataframes in R
Zwei Dataframe in R zusammenführen

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:

R-Dataframe-Beispiel

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:

R-Dataframe-Beispiel

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

Verwandter Artikel - R Data Frame