2 回答

TA貢獻(xiàn)1934條經(jīng)驗 獲得超2個贊
這很容易做到:
X[Y, z := i.z]
之所以起作用,是因為Y[X]和之間的唯一區(qū)別X[Y]是當(dāng)某些元素不在in時Y,在這種情況下,您可能想z成為NA,上面的賦值恰好可以做到。
它對于許多變量也同樣適用:
X[Y, `:=`(z1 = i.z1, z2 = i.z2, ...)]
由于您需要進行操作Y[X],因此可以添加參數(shù)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貢獻(xiàn)1798條經(jīng)驗 獲得超3個贊
除了上述答案外,您還可以執(zhí)行(v1.9.6+):
require(data.table) # v1.9.6+
X[Y, (colNames) := mget(paste0("i.", colNames))]
colNames字符向量在哪里列出您想要的列Y。這樣,當(dāng)您要添加許多列時,您可以有效地選擇要添加的列(colNames從的子集定義names(Y))。
另外,您可以將其與新on=參數(shù)(來自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中的數(shù)據(jù)幀行。
- 2 回答
- 0 關(guān)注
- 684 瀏覽
添加回答
舉報