我有两个data.tables,X(3m行〜500列)和Y(100行两列).
set.seed(1) X <- data.table( a=letters,b=letters,c=letters,g=sample(c(1:5,7),length(letters),replace=TRUE),key="g" ) Y <- data.table( z=runif(6),g=1:6,key="g" )
我想在X上做一个左外连接,我可以通过Y [X]来做:谢谢:
Why does X[Y] join of data.tables not allow a full outer join,or a left join?
但是我想将新的列添加到X,而不复制X(因为它是巨大的).
显然,像X< - Y [X]这样的东西是有效的,但是除非数据表远比我给予它更多的信任(而且我给予它很多的诡计!),我相信这将复制整个X. X [,z:= Y [X,z] $z]工作,但是是kludgy,并且不能很好地扩展到多列. 如何将合并的结果存储在保留的data.table文件中,以有效的方式(无论是在副本还是在程序员时间方面)?
解决方法
这很容易做到:
X[Y,z := i.z]
它的工作原理是因为Y [X]和X [Y]之间的唯一区别是当某些元素不在Y中时,在这种情况下,大概您希望z为NA,上述赋值将完全正确.
它也将适用于许多变量:
X[Y,`:=`(z1 = i.z1,z2 = i.z2,...)]
由于您需要操作Y [X],您可以添加参数nomatch = 0(作为@mnel指出),以便对于X不包含Y的键值的那些,不能获得NAs.即:
X[Y,z := i.z,nomatch=0]
06003
NEW FEATURES
06004