首页 > 解决方案 > 过滤 data.table 当且仅当条件被验证时,尽管 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))它按预期工作一样,但我正在寻找一种通过像&and这样的运算符来表达“当且仅当”的方法|

这可能吗?

谢谢!

标签: rfilterdata.tablena

解决方案


这有效:

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

在这个解决方法中,我只选择不返回的行TRUEcondition df$b < df$a。这意味着他们可以返回FALSENA真正返回。


推荐阅读