2 回答
TA贡献1934条经验 获得超2个赞
这很容易做到:
X[Y, z := i.z]
之所以起作用,是因为Y[X]和之间的唯一区别X[Y]是当某些元素不在in时Y,在这种情况下,您可能想z成为NA,上面的赋值恰好可以做到。
它对于许多变量也同样适用:
X[Y, `:=`(z1 = i.z1, z2 = i.z2, ...)]
由于您需要进行操作Y[X],因此可以添加参数nomatch=0(如@mnel所指出的),以便对于X不包含Y的键值的那些对象不获取NA。即:
X[Y, z := i.z, nomatch=0]
从NEWS获取data.table
**********************************************
** **
** CHANGES IN DATA.TABLE VERSION 1.7.10 **
** **
**********************************************
新的功能
o The prefix i. can now be used in j to refer to join inherited
columns of i that are otherwise masked by columns in x with
the same name.
TA贡献1798条经验 获得超3个赞
除了上述答案外,您还可以执行(v1.9.6+):
require(data.table) # v1.9.6+
X[Y, (colNames) := mget(paste0("i.", colNames))]
colNames字符向量在哪里列出您想要的列Y。这样,当您要添加许多列时,您可以有效地选择要添加的列(colNames从的子集定义names(Y))。
另外,您可以将其与新on=参数(来自v1.9.6+)组合为:
# ad-hoc joins using 'on=' instead of setting keys
require(data.table) # v1.9.6+
X[Y, (colNames) := mget(paste0("i.", colNames)), on = "g"]
值得在(colNames) := mget(colNames)这里使用akrun的策略:更新R中的数据帧行。
- 2 回答
- 0 关注
- 633 浏览
添加回答
举报