R 合并多个数据表

R 合并多个数据表,r,join,merge,data.table,R,Join,Merge,Data.table,我知道一个人可以用merge函数或[.data.table函数合并(连接)两个data.table。但是,如果我说10,data.tables,并且想使用do.call将它们合并在一起,有没有一个函数可以做到这一点?目前我求助于do.call(cbind,…)仅适用于非常特殊的情况。不确定,但可能(未经测试): 为了充实@Henk在评论中建议的解决方案,以下是如何使用它以简明的形式选择all=TRUE选项: MergedDT = Reduce(function(...) merge(..., a

我知道一个人可以用
merge
函数或
[.data.table
函数合并(连接)两个
data.table
。但是,如果我说10,
data.table
s,并且想使用
do.call
将它们合并在一起,有没有一个函数可以做到这一点?目前我求助于
do.call(cbind,…)
仅适用于非常特殊的情况。

不确定,但可能(未经测试):


为了充实@Henk在评论中建议的解决方案,以下是如何使用它以简明的形式选择
all=TRUE
选项:

MergedDT = Reduce(function(...) merge(..., all = TRUE), List_of_DTs)

最新版本的data.table(1.10.5)有一个简单的表连接语法,也可以链接

 set(DT1, key)
 set(DT2, key) 
  ...
 set(DT10, key)

 DT_cmb <- DT1[DT2,][DT3,]...[DT10,]
set(DT1,键)
设置(DT2,键)
...
设置(DT10,键)

DT_cmb reduce解决方案工作得很好,但我不知道如何指定all=TRUE。有什么想法吗?@sdaza Hm问得好。目前我所能想到的是创建一个包装器,如
mymerge=function(x,y)merge.data.table(x,y,all=TRUE)
并将该包装器传递给
reduce
,即
reduce(mymerge,list(DT1,DT2,DT3,…)
。在data.table中为我工作。如果您的
data.table
s未被选中,包装器应该看起来像
函数(x,y)x[y,on=“merge\u column\u name”]
这个解决方案看起来不错,但如果您有多个
data.table
,它可能是详尽无遗的。可能有一个简单(更通用)的解决方案使用
lappy
ls(pattern='^DT')
来实现它的方法。@lcgodoy是的,我喜欢使用
lappy()
setkeyv()
在这些情况下,特别是因为我已经希望列表中的
data.table
s使用我的首选语法。这种语法适用于年龄,而链接也适用于年龄,问题是它无法缩放,因为您可能有数量不同的data.table列表
 set(DT1, key)
 set(DT2, key) 
  ...
 set(DT10, key)

 DT_cmb <- DT1[DT2,][DT3,]...[DT10,]