有可能行绑定两个没有相同列集的数据帧吗?我希望保留绑定后不匹配的列。
当前回答
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)
我也有一个印象,对于大数据集,它比其他方法更快。
gtools/smartbind不喜欢使用Dates,可能是因为它是as.vector。这是我的解决方案……
sbind = function(x, y, fill=NA) {
sbind.fill = function(d, cols){
for(c in cols)
d[[c]] = fill
d
}
x = sbind.fill(x, setdiff(names(y),names(x)))
y = sbind.fill(y, setdiff(names(x),names(y)))
rbind(x, y)
}
您可以将它们插入到原始数据库(db1)的末尾,并添加第二个数据库的行数。db2中不包括的列将显示NA值。
db1[nrow(db1)+1:nrow(db1)+nrow(db2), names(db2)] <- db2