将 data.tables 附加到已经存在的 NA 条目

Append data.tables with already existing NA entries

当 ID 重叠时,我试图用另一个数据集填充一个大型数据集。我有一个 data.table:

library(data.table)
dt1 <- data.table(id = c("a","b","c"),
              x = 1:3,
              y = c(1,NA,NA),
              z = c(1, NA, NA))

在某些变量中有 NA。我有另一个 data.table,其中包含有关这些变量的信息:

dt2 <- data.table(id = c("b","c"),
              y = c(4,5),
              z = c(6,7))

我想通过用 dt2 填充 dt1 来将两者结合起来。我不是在寻找解决方法(一个在 p.s 中),因为我认为有一些聪明的连接或合并方法可以做到这一点。我只是找不到它。实际上,xy+z 都是很多列,因此基于一列的条件无济于事(尽管我可以获得字符向量中的列)。

goal <- data.table(id = c("a","b","c"),
              x = 1:3,
              y = c(1,4,5),
              z = c(1, 6, 7))

p.s.: 这是一个丑陋的解决方法,但我认为这种方法在我的函数深处容易出错,其中列一​​直在变化等:

adder <- merge(dt2, dt1[id %in% dt2[, id],id,x], by ="id", all = T)
done <- dt1[!is.na(y) & !is.na(z)]
rbind(adder, done)

更新加入是否适合您的案例?

library(data.table)

dt1 <- data.table(id = c("a","b","c"),
                  x = 1:3,
                  y = c(1,NA,NA),
                  z = c(1, NA, NA))


dt2 <- data.table(id = c("b","c"),
                  y = c(4,5),
                  z = c(6,7))


dt1[dt2, on=.(id), c("y", "z") := .(i.y, i.z)][]
#>    id x y z
#> 1:  a 1 1 1
#> 2:  b 2 4 6
#> 3:  c 3 5 7

reprex package (v2.0.1)

创建于 2021-08-12