提问人:ab192 提问时间:8/5/2021 最后编辑:j__carlsonab192 更新时间:8/6/2021 访问量:299
布尔表达式 - 如果 2 个或更多条件为 True
Boolean expression - if 2 or more conditions True
问:
我正在尝试根据某些条件创建一个 dplyr 过滤器,比如有三个条件,condition1、condition2 和 condition3。 如果任何两个或多个条件为 TRUE,我希望它总体评估为 TRUE,
知道如何在 R 中轻松做到这一点吗?我可以用每个条件组合做一个很长的表达,但希望能有更容易的东西,
非常感谢
编辑:
根据要求进行 Reprex
df %>%
filter(condition1|condition2|condition2)
我想要 df 的子集,其中上述两个或多个条件为真
答:
0赞
andrew_reece
8/5/2021
#1
这是一种方法。你也可以使用,如果你想严格整洁它。dplyr
rowwise
c_across
library(dplyr)
df <- tibble(a = c(T, T, F), b = c(F, T, T), c = c(T, F, F))
df
# A tibble: 3 x 4
a b c truth_ct
<lgl> <lgl> <lgl> <dbl>
1 TRUE FALSE TRUE 2
2 TRUE TRUE FALSE 2
3 FALSE TRUE FALSE 1
df %>%
mutate(truth_ct = rowSums(.)) %>%
filter(truth_ct >= 2)
# A tibble: 2 x 4
a b c truth_ct
<lgl> <lgl> <lgl> <dbl>
1 TRUE FALSE TRUE 2
2 TRUE TRUE FALSE 2
rowwise
方法:
df %>%
rowwise() %>%
mutate(truth_ct = sum(c_across(a:c))) %>%
filter(truth_ct >= 2)
评论
0赞
ab192
8/6/2021
谢谢,我最终发现了 rowwise,虽然我不知道c_across,非常有用
0赞
akrun
8/6/2021
#2
用reduce
library(dplyr)
library(purrr)
df %>%
filter(reduce(cur_data(), `+`) >=2)
# A tibble: 2 x 3
a b c
<lgl> <lgl> <lgl>
1 TRUE FALSE TRUE
2 TRUE TRUE FALSE
评论
t= c(TRUE,FALSE,TRUE); sum(t)
sum(t)