对不起,标题不好。这是我能想到的最好的。
我有两个数据帧要合并(df1 和 df2(。 df1 的长度与 df2 不同。我不希望有关 df1 的信息与 df2 在同一行。我想用 NA 填充其余的空白空间。
如果可能的话,我更喜欢整洁的解决方案。
DF1 和 DF2:
df1 <- data.frame(Alpha = c(2,2),
Bravo = c(3,3))
df2 <- data.frame(Charlie = c(1,1,1),
Delta = c(2,2,2))
这是我想要的:
df3 <- data.frame(Alpha = c(2,2,NA,NA,NA),
Bravo = c(3,3,NA,NA,NA),
Charlie = c(NA, NA, 1,1,1),
Delta = c(NA, NA, 2,2,2))
带dplyr
:
bind_rows(df1, df2)
Alpha Bravo Charlie Delta
1 2 3 NA NA
2 2 3 NA NA
3 NA NA 1 2
4 NA NA 1 2
5 NA NA 1 2
不是tidyverse
解决方案,而是基本 R 解决方案。
一种方法是根据输入数据帧重建新数据帧。
final <- as.data.frame(matrix(NA, nrow = nrow(df1) + nrow(df2),
ncol = ncol(df1) + ncol(df2), dimnames = list(NULL, c(names(df1), names(df2)))))
final[1:nrow(df1), names(df1)] <- df1
final[(nrow(df1) + 1):nrow(final), names(df2)] <- df2
final
# Alpha Bravo Charlie Delta
#1 2 3 NA NA
#2 2 3 NA NA
#3 NA NA 1 2
#4 NA NA 1 2
#5 NA NA 1 2
我们可以使用data.table
中的rbindlist
library(data.table)
rbindlist(list(df1, df2))