加入多个密钥和条件更新

时间:2016-08-12 05:54:32

标签: r data.table

我希望能够有条件地更新列,其中一个条件基于多个键上的表连接。还有另一种方法,而不是使用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排除行?

0 个答案:

没有答案