将 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
,您需要使用 rowwise
和 c_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
如何在 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
,您需要使用 rowwise
和 c_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