我正在尝试使用特定列的公共id上的另一个dt2数据表来更新一些dt1的数据表。只有当dt1中特定列的值为空(NA(时,才应更新该特定列。
例如,这会更新所有内容:
dt1 <- data.table(
"id" = c(1,2,3,4),
"animal" = c("cat","cat","dog",NA)
)
dt2 <- data.table(
"id" = c(3,4),
"animal" = c("human being","duck")
)
dt1 <- dt1[dt2, on = c("id"),"animal" := .(i.animal)]
对于dt1
id animal
1: 1 cat
2: 2 cat
3: 3 human being
4: 4 duck
当我需要时
id animal
1: 1 cat
2: 2 cat
3: 3 dog
4: 4 duck
我们可以使用fcoalecse
library(data.table)
dt1[dt2, animal := fcoalesce(animal, i.animal), on = .(id)]
-输出
> dt1
id animal
<num> <char>
1: 1 cat
2: 2 cat
3: 3 dog
4: 4 duck