过滤器 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 FALSE
或 NA
或其他任何东西。
我们可以使用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
我想使用条件过滤我的数据,但 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 FALSE
或 NA
或其他任何东西。
我们可以使用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