R:使用另一个数据表的值更新数据表中的 NA

kam*_*ath 2 merge r na data.table

有如下结构的两个数据表:

 DT1 <- data.table(ID=c("A","B","C"), P0=c(1,10,100), key="ID")
 DT2 <- data.table(ID=c("B","B","B","A","A","A","C","C","C"), t=rep(seq(0:2),3), P=c(NA,30,50,NA,4,6,NA,200,700)) 
Run Code Online (Sandbox Code Playgroud)

在数据表中DT2,列中的所有 NAP应由P0数据表中的值更新DT1

如果DT2IDlike排序DT1,问题可以这样解决:

 setorder(DT2,ID)
 idxr <- which(DT2[["t"]]==1)
 set(DT2, i=idxr, j="P", value=DT1[["P0"]])
Run Code Online (Sandbox Code Playgroud)

但是数据表如何在没有事先排序的情况下“合并”DT2呢?

Dav*_*urg 5

这是按条件加入的另一种选择

DT2[is.na(P), P := DT1[.SD, P0]]
DT2
#    ID t   P
# 1:  B 1  10
# 2:  B 2  30
# 3:  B 3  50
# 4:  A 1   1
# 5:  A 2   4
# 6:  A 3   6
# 7:  C 1 100
# 8:  C 2 200
# 9:  C 3 700
Run Code Online (Sandbox Code Playgroud)