data.table join然后将列添加到现有的data.frame中,无需重新复制

前端之家收集整理的这篇文章主要介绍了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

06003

NEW FEATURES

06004

原文链接:https://www.f2er.com/mssql/81304.html

猜你在找的MsSQL相关文章