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,]