首页 > 解决方案 > 在 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

由于某种原因,过滤器被忽略,因为 iris 包含 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 过滤器的“任何”运算符使代码工作?

拉斐尔

标签: rdplyr

解决方案


any您的代码有什么用途?我想你只是想要

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

或者

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

在任何一种情况下,里面的表达式filter都会返回一个与数据框中的行相对应的向量。相比之下,any返回单个值,TRUE要么FALSE过滤所有行,要么不过滤。


推荐阅读