根据DT2列值更新DT1中行子集的列值

时间:2018-10-03 20:30:51

标签: r data.table

我有以下两个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"]

1 个答案:

答案 0 :(得分:3)

这是一个“更新联接”:

DT1[is.na(y), y := DT2[.SD, on=.(x), x.y]]

工作原理

data.table语法为x[i, j],可以读取为...

  1. i子集;然后
  2. 执行j

其他说明:

  • j内,.SD引用了子表。

  • j的{​​{1}}内,x[i, on=, j]前缀表示该列取自x.*