过滤器 data.table 当且仅当条件得到验证,尽管 NA

Filter data.table if and only if condition is verified despite NA

我想使用条件过滤我的数据,但 NA 的存在会影响结果。

例如:

dt <- data.table(a=c(1:4,NA), b=c(NA,2,1,4,5), d=c(1,2,NA,4,NA))
dt

    a  b  d
1:  1 NA  1
2:  2  2  2
3:  3  1 NA
4:  4  4  4
5: NA  5 NA

当我做的时候

subset(dt, !(b < a))
   a b d
1: 2 2 2
2: 4 4 4

即,如果 a 或 b 为 NA,则排除该行:

但我想要的结果是

    a  b  d
1:  1 NA  1
2:  2  2  2
3:  4  4  4
4: NA  5 NA

也就是说,当且仅当条件成立时,我只想排除一行。

如果我添加更多条件,例如 subset(dt, is.na(a) | is.na(b) | !(b < a)),它会按预期工作,但我一直在寻找一种通过 &|[ 等运算符来表达 'if and only if' 的方法

这可能吗?

谢谢!

这个有效:

dt[!which(dt$b < dt$a), ]

    a  b  d
1:  1 NA  1
2:  2  2  2
3:  4  4  4
4: NA  5 NA

在这个解决方法中,我只选择了不符合条件 return TRUE 的行 df$b < df$a。这意味着他们可以 return FALSENA 或其他任何东西。

我们可以使用if_any

library(dplyr)
dt %>%
    filter(if_any(c(b, a), is.na)|b >=a)
    a  b  d
1:  1 NA  1
2:  2  2  2
3:  4  4  4
4: NA  5 NA