Rbind两个数据帧,其中列没有以相同的格式排列?

时间:2018-01-17 16:07:52

标签: r

我有两个数据帧,比如df1和df2,我需要rbind。

DF1如下所示:

a   b   c
1   11  21
2   12  22
3   13  23

DF2如下所示:

b   a   d
14  4   31
15  5   32
16  6   33

a,b,c,d是列名。

我想要输出如下:

a   b   c   d
1   11  21  31
2   12  22  32
3   13  23  33
4   14      
5   15      
6   16      

现在,我试试

final< - rbind(df1,df2)

可以在r?

中完成

3 个答案:

答案 0 :(得分:1)

NM = unique(c(names(df1), names(df2)))
mylist = setNames(lapply(NM, function(nm) c(df1[[nm]], df2[[nm]])), NM)
data.frame(lapply(mylist, function(x) x[1:max(lengths(mylist))]))
#  a  b  c  d
#1 1 11 21 31
#2 2 12 22 32
#3 3 13 23 33
#4 4 14 NA NA
#5 5 15 NA NA
#6 6 16 NA NA

也可以尝试

merge(df1, df2, all = TRUE)

data.table::rbindlist(list(df1, df2), use.names = TRUE, fill = TRUE)

数据

df1 = structure(list(a = 1:3, b = 11:13, c = 21:23), .Names = c("a", 
"b", "c"), class = "data.frame", row.names = c(NA, -3L))

df2 = structure(list(b = 14:16, a = 4:6, d = 31:33), .Names = c("b", 
"a", "d"), class = "data.frame", row.names = c(NA, -3L))

答案 1 :(得分:0)

smartbind()包中尝试gtools功能。它可用于组合具有不同列的数据集。

答案 2 :(得分:0)

我建议bind_rows包中的dplyr

library(dplyr)
bind_rows(df1, df2)

它非常简单,dplyr是一个具有很多实用程序的包,所以你应该能够为任何项目挤出更多的用途而不仅仅是这个单一的功能。