有可能行绑定两个没有相同列集的数据帧吗?我希望保留绑定后不匹配的列。


当前回答

rbind。从包装胶合板填充可能是你正在寻找的。

其他回答

您可以在gtools包中使用smartbind。

例子:

library(gtools)
df1 <- data.frame(a = c(1:5), b = c(6:10))
df2 <- data.frame(a = c(11:15), b = c(16:20), c = LETTERS[1:5])
smartbind(df1, df2)
# result
     a  b    c
1.1  1  6 <NA>
1.2  2  7 <NA>
1.3  3  8 <NA>
1.4  4  9 <NA>
1.5  5 10 <NA>
2.1 11 16    A
2.2 12 17    B
2.3 13 18    C
2.4 14 19    D
2.5 15 20    E

您也可以只取出公共列名。

> cols <- intersect(colnames(df1), colnames(df2))
> rbind(df1[,cols], df2[,cols])

只是为了文档。你可以用下面的形式尝试Stack库和它的函数Stack:

Stack(df_1, df_2)

我也有一个印象,对于大数据集,它比其他方法更快。

data.table的替代方案:

library(data.table)
df1 = data.frame(a = c(1:5), b = c(6:10))
df2 = data.frame(a = c(11:15), b = c(16:20), c = LETTERS[1:5])
rbindlist(list(df1, df2), fill = TRUE)

Rbind也可以在数据中工作。表中只要对象都转换为数据。表对象,所以

rbind(setDT(df1), setDT(df2), fill=TRUE)

也适用于这种情况。当您有几个数据时,这可能更可取。表,而不想构造列表。

rbind。从包装胶合板填充可能是你正在寻找的。