In R: Zwei data frames zeilenweise kombinieren (rbind), wenn sie unterschiedliche Mengen an Spalten haben.

Wenn Sie zwei data.frames zeilenweise kombinieren möchten, die unterschiedliche Mengen an Spalten haben, gibt es mehrere Ansätze. Eine gebräuchliche Methode ist, sicherzustellen, dass beide Datenrahmen dieselben Spalten haben (wobei fehlende Spalten mit NAs gefüllt werden) und dann rbind() zu verwenden.

Hier ist ein Beispiel, wie Sie dies tun können:

  1. Zuerst erstellen wir zwei Beispiel-data.frames:
df1 <- data.frame(
  A = 1:3,
  B = letters[1:3]
)

df2 <- data.frame(
  A = 4:6,
  C = letters[4:6]
)
  1. Nun definieren wir eine Funktion, die die Datenrahmen so anpasst, dass sie dieselben Spalten haben:
bind_dfs <- function(df1, df2) {
  common_cols <- intersect(names(df1), names(df2))
  only_df1 <- setdiff(names(df1), common_cols)
  only_df2 <- setdiff(names(df2), common_cols)

  df1[, only_df2] <- NA
  df2[, only_df1] <- NA

  combined_df <- rbind(df1, df2)
  return(combined_df[ , order(names(combined_df))])
}
  1. Anschließend können Sie die Funktion verwenden, um die beiden data.frames zu kombinieren:
result <- bind_dfs(df1, df2)
print(result)

Das Ergebnis ist ein kombinierter Datenrahmen, der die Zeilen aus df1 und df2 enthält. Spalten, die in einem der ursprünglichen Datenrahmen, aber nicht im anderen vorhanden waren, werden mit NAs gefüllt.

Wenn Sie das dplyr-Paket verwenden, gibt es eine Funktion namens bind_rows(), die dieses Verhalten direkt unterstützt:

library(dplyr)

result_dplyr <- bind_rows(df1, df2)
print(result_dplyr)

bind_rows() aus dplyr ist in der Regel einfacher und direkter, aber es ist gut zu wissen, wie man das manuell macht, falls Sie nicht auf externe Pakete angewiesen sein möchten.