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

标签 r data.table

我有以下两个数据表

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] 并且可以读作...

  1. i的子集;然后
  2. j

其他说明:

  • j内部,.SD指的是子集表。

  • x[i, on=, j]j 内,x.* 前缀表示该列是取自x

关于r - 根据 DT2 列值更新 DT1 中行子集的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52635222/

相关文章:

r - 使用 R 将 data.frame 转换为基于 dataframe 的某一列的字符列表

html - R - 带有输入的网络抓取动态表单

r - R、超正方体和预处理图像中的 OCR 表

string - 自动将变量名称添加到列表的元素

r - 分组数据帧 (dplyr) R 中每个元素的值总和大于或等于

r - 使用data.table的简单频率表

r - R中的系统命令和转义问题

reshape 会抛出 data.table 错误,但不会抛出 data.frame 错误

R 满足条件时按组排第一行

r - 如何避免在 data.table 中进行向量搜索