将 any 与 dplyr 一起使用

Using any with dplyr

如何在 dplyr 管道中使用 any ?

例如 mydata ,我想提取至少有一个 TRUE.

的行
mydata = data.frame(V1=c(FALSE,NA,FALSE,TRUE),
                    V2 = c(NA,TRUE,FALSE,TRUE),
                    V3 = c(FALSE,FALSE,FALSE,TRUE))

mydata

     V1    V2    V3
1 FALSE    NA FALSE
2    NA  TRUE FALSE
3 FALSE FALSE FALSE
4  TRUE  TRUE  TRUE

作为您问题的具体解决方案,请尝试以下操作。

x <- mydata %>% filter(V1 | V2 | V3)

我认为如果使用 any,您需要使用 rowwisec_across,但正如@akrun 所指出的,函数 if_any 很好地结合了这些元素。

library(dplyr, warn.conflicts = FALSE)

mydata <- data.frame(
    V1 = c(FALSE, NA, FALSE, TRUE),
    V2 = c(NA, TRUE, FALSE, TRUE),
    V3 = c(FALSE, FALSE, FALSE, TRUE))

mydata %>%
    rowwise() %>%
    filter(any(c_across(starts_with("V")))) %>%
    ungroup()
#> # A tibble: 2 x 3
#>   V1    V2    V3   
#>   <lgl> <lgl> <lgl>
#> 1 NA    TRUE  FALSE
#> 2 TRUE  TRUE  TRUE

mydata %>% 
    filter(if_any(starts_with("V")))
#>     V1   V2    V3
#> 1   NA TRUE FALSE
#> 2 TRUE TRUE  TRUE

reprex package (v2.0.0)

于 2021-06-25 创建

我们可以if_any以向量化的方式使用

library(dplyr)
mydata %>% 
  filter(if_any(starts_with('V')))
    V1   V2    V3
1   NA TRUE FALSE
2 TRUE TRUE  TRUE