我有以下两个data.tables
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列为NA的行中更新DT1 $ y的值以匹配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"]
答案 0 :(得分:3)
这是一个“更新联接”:
DT1[is.na(y), y := DT2[.SD, on=.(x), x.y]]
工作原理
data.table语法为x[i, j]
,可以读取为...
i
子集;然后j
。 其他说明:
在j
内,.SD
引用了子表。
在j
的{{1}}内,x[i, on=, j]
前缀表示该列取自x.*
。