使用名称向量的do.call来查找具有不同列的rb.data.tables

时间:2020-07-08 17:23:17

标签: r data.table do.call

我有几个data.tables,它们要附加/行绑定到不同的列。结果应该是一个包含所有列的data.table(不仅列显示所有rbinded数据集)。这是一个例子

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)

从@kdauria在这篇帖子Combine two data frames by rows (rbind) when they have different sets of columns中的答案中借来的。

但是我只知道我的数据集是名称c(“ a”,“ b”)的向量,因为它们有时会有所不同。因此,我正在做以下事情

goo <- function(...) rbind(...,fill=TRUE)
do.call(goo,sapply(c("a","b"),function(x) eval(parse(text=x))))

这完成了工作,但是我在考虑是否没有更聪明的方法来构造do.call()调用。

1 个答案:

答案 0 :(得分:3)

mget()

a = data.frame(a = c(1:5), b = c(6:10))
b = data.frame(a = c(11:15), b = c(16:20), c = LETTERS[1:5])
vn <- c("a","b")

rbindlist(mget(vn), fill = TRUE)

#      a  b    c
#  1:  1  6 <NA>
#  2:  2  7 <NA>
#  3:  3  8 <NA>
#  4:  4  9 <NA>
#  5:  5 10 <NA>
#  6: 11 16    A
#  7: 12 17    B
#  8: 13 18    C
#  9: 14 19    D
# 10: 15 20    E