data.table join然后将列添加到现有的data.frame中,无需重新复制
我有两个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] 从NEWS for data.table
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |