【发布时间】:2023-03-20 14:59:01
【问题描述】:
我有两个数据表:
> DT1 <- data.table(col1 = c("a","b","b","a","c","b","a","c")
, col2 = c("b","d","c","a","d","a","c","a")
, col3 = c(1,2,3,4,5,6,7,8))
> DT2 <- data.table(col1 = c("b","e","c","e","b","c","d","a")
, col2 = c("d","b","c","d","a","a","c","a")
, col3 = c(NA,1,2,NA,6,NA,3,NA))
> DT1
col1 col2 col3
1: a b 1
2: b d 2
3: b c 3
4: a a 4
5: c d 5
6: b a 6
7: a c 7
8: c a 8
> DT2
col1 col2 col3
1: b d NA
2: e b 1
3: c c 2
4: e d NA
5: b a 6
6: c a NA
7: d c 3
8: a a NA
我想使用 col1 和 col2 将 DT2 的 col3 为 NA 的行与 DT1 的行进行匹配,如果匹配存在,则用 DT1 中的值填充 DT2 中 col3 的 NA 值。
> #desired Output
> DT2_output
col1 col2 col3
1: b d 2
2: e b 1
3: c c 2
4: e d NA
5: b a 6
6: c a 8
7: d c 3
8: a a 4
如何使用简洁的 data.table 操作(无循环)来执行此操作,因为每个 data.table 中有数百万行。 我尝试了以下操作,但它给了我错误,我认为这与 which 语句有关。
> ##doesn't work
> DT2[is.na(col3), col3 := DT1[which(col1 == DT2[is.na(col3),col1] && col2 == DT2[is.na(col3), col2]), col3]]
【问题讨论】:
-
也许
DT2[is.na(col3), col3 := DT1[DT2[is.na(col3)], col3, on=.(col1, col2)]]
标签: r data.table match