我有以下两个数据表
library(data.table)
DT1 = data.table(x=LETTERS[1:9], y=c(15:18,NA,20,NA, NA, 23) , v=1:9)
DT2 = data.table(x=LETTERS[1:9], y=99:107, v=19:27)
在连接 x 上的表时,如何更新 DT1$y 的值以仅匹配 DT1 中 y 列为 NA 的行的 DT2$y 值。
最终结果是:
x y v
1: A 15 1
2: B 16 2
3: C 17 3
4: D 18 4
5: E 103 5
6: F 20 6
7: G 105 7
8: H 106 8
9: I 23 9
我知道我可以执行以下操作来更新 DT1 中的整个 y 列,但不确定如何将 y 列更新限制为仅 NA 值。
DT[DT2, y:=i.y, on="x"]
最佳答案
这是一个“更新连接”:
DT1[is.na(y), y := DT2[.SD, on=.(x), x.y]]
工作原理
data.table 语法为 x[i, j]
并且可以读作...
- 取
i
的子集;然后 - 做
j
。
其他说明:
在
j
内部,.SD
指的是子集表。在
x[i, on=, j]
的j
内,x.*
前缀表示该列是取自x
。
关于r - 根据 DT2 列值更新 DT1 中行子集的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52635222/