我希望能够有条件地更新列,其中一个条件基于多个键上的表连接。还有另一种方法,而不是使用ifelse
来做这件事吗?
示例,我想根据连接更新标记,但首先排除状态不是NA的地方:
library(data.table)
dt_A <- data.table(key1 = LETTERS[1:6], key2 = (1:6), flag=NA_character_ )
dt_A[4, flag:="exclude"]
dt_B <- data.table(key1 = LETTERS[3:6], key2 = c(3:5,0L))
print(dt_A)
key1 key2 flag
1: A 1 NA
2: B 2 NA
3: C 3 NA
4: D 4 exclude
5: E 5 NA
6: F 6 NA
print(dt_B)
key1 key2
1: C 3
2: D 4
3: E 5
4: F 0
使用ifelse
可以获得正确的结果:
dt_A[dt_B, flag:=ifelse(is.na(flag), "include", flag), on = c("key1","key2"), nomatch=0L]
print(dt_A)
key1 key2 flag
1: A 1 NA
2: B 2 NA
3: C 3 include
4: D 4 exclude
5: E 5 include
6: F 6 NA
在我看来,这不是最有效的方式。
在分配值之前,有没有办法先用status != NA
排除行?