data.table dplyr full_join等效就地修改

data.table dplyr full_join等效就地修改,r,data.table,pass-by-reference,outer-join,R,Data.table,Pass By Reference,Outer Join,我最近发现了data.table,我喜欢它就地修改值的能力,因为我通常使用大小在10-15GB左右的数据集 虽然我能够通过适当的修改进行左/右连接,但我找不到一个解决方案如何使用完全(外部)连接(即从表a中获取所有值,从表B中获取所有值,并用NA填充缺失的值,如dplyr::full_join) 我找到了一个stackoverflow答案,它显示了如何为左/右连接执行此操作: A <- data.table(a = 1:4, b = 12:15) B <- data.table(c

我最近发现了data.table,我喜欢它就地修改值的能力,因为我通常使用大小在10-15GB左右的数据集

虽然我能够通过适当的修改进行左/右连接,但我找不到一个解决方案如何使用完全(外部)连接(即从表a中获取所有值,从表B中获取所有值,并用NA填充缺失的值,如dplyr::full_join)

我找到了一个stackoverflow答案,它显示了如何为左/右连接执行此操作:

A <- data.table(a = 1:4, b = 12:15)
B <- data.table(c = 2:3, b = 13:14)

B[A, b.A:= i.b, on = c(c = "a")]

A不是一个真正的技术解释,但我认为它是:每当您在data.table中使用
:=
以通过引用/就地更新时,您可以添加、更改或删除一列或多列,但不能修改表的行数。在完全联接中,需要修改行数,因此不能使用当前实现的
:=
。因此,你必须把结果分配给一个新的对象来保存它。嗯,这是有道理的。但如果我正确理解R的“在更改时复制”样式,那么将两个数据集(除了一个列之外)合并在一起会极大地占用内存。任何关于如何处理这个问题的想法都是非常受欢迎的:)与我的评论相关。关于“许多共同的专栏”,您可能需要重新思考您的数据结构。哈德利整洁的数据文件是一个很好的起点(没有可复制的例子,很难更具体)。。。我写的和我想说的完全相反。。。我经常有两个数据集,它们有1-2个共同的列,我想基于这些列通过引用进行连接。我为混乱感到抱歉。