当使用第二个data.table
的一列进行引用赋值时,使用data.table
进行赋值操作的结果是不一致的。 当两个data.table
的关键列都没有匹配时,似乎赋值表达式y := y
完全被忽略了-甚至连NA
也没有返回。
library(data.table)
dt1 <- data.table(id = 1:2, x = 3:4, key = "id")
dt2 <- data.table(id = 3:4, y = 5:6, key = "id")
print(dt1[dt2, y := y])
## id x # Would have also expected column: y
## 1: 1 3 # NA
## 2: 2 4 # NA
然而,当存在部分匹配时,不匹配的列会有一个占位符 NA
。
dt2[, id := 2:3]
print(dt1[dt2, y := y])
## id x y
## 1: 1 3 NA # <-- placeholder NA here
## 2: 2 4 5
这会对后面假定所有情况下都有一个y
列的代码造成混乱。否则,我将不得不编写繁琐的额外检查来考虑这两种情况。是否有一种优雅的方法来解决这种不一致性?
dt1[, y:=NA_integer_];dt1[dt2, y:=y][]
- GSeey
不在连接表中时,我更快地注意到了代码中的错误。但是,你提出的建议可能更好,因为它更加健壮。 - MichaelChirico