在dplyr过滤器中使用“ any”运算符

时间:2018-10-31 10:05:01

标签: r dplyr

我正在尝试使用dplyr包中“过滤器”内的“任何”运算符 像这样:

 library(tidyverse)

 iris %>%
   as_tibble() %>%
   filter( any(Species == "setosa",
               Species == "versicolor") )

# A tibble: 150 x 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
 6          5.4         3.9          1.7         0.4 setosa 
 7          4.6         3.4          1.4         0.3 setosa 
 8          5           3.4          1.5         0.2 setosa 
 9          4.4         2.9          1.4         0.2 setosa 
10          4.9         3.1          1.5         0.1 setosa 
# ... with 140 more rows

由于某些原因,过滤器被忽略了,因为虹膜包含150行。

但是,当“ |”运算符用于返回正确的行数:

 library(tidyverse)

 iris %>%
   as_tibble() %>%
   filter( Species == "setosa" | 
             Species == "versicolor" )

# A tibble: 100 x 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
 6          5.4         3.9          1.7         0.4 setosa 
 7          4.6         3.4          1.4         0.3 setosa 
 8          5           3.4          1.5         0.2 setosa 
 9          4.4         2.9          1.4         0.2 setosa 
10          4.9         3.1          1.5         0.1 setosa 
# ... with 90 more rows

是否可以使用带有dplyr过滤器的“ any”运算符使代码正常工作?

拉斐尔

1 个答案:

答案 0 :(得分:1)

any在您的代码中起什么作用?我想你只是想要

… %>% filter(Species == "setosa" | Species == "versicolor")

… %>% filter(Species %in% c("setosa", "versicolor"))

无论哪种情况,filter内的表达式都会返回一个 vector ,它对应于数据框内的行。相比之下,any返回一个单个值,即TRUEFALSE,因此它将过滤所有行,或者不过滤。