【问题标题】:How can I use dplyr::filter with "|" operator? [duplicate]如何将 dplyr::filter 与“|”一起使用操作员? [复制]
【发布时间】:2020-06-08 20:59:35
【问题描述】:

我一直使用dplyrfilter() 函数来整理我的数据。今天它在使用| 运算符时停止工作。我确信我已经能够使用| 过滤任何符合| 分隔的任何标准的观察结果,但它突然无法正常工作。一如既往地非常感谢任何帮助/指导。代表如下。

library(tidyverse)
#> Warning: package 'tibble' was built under R version 3.6.2
#> Warning: package 'tidyr' was built under R version 3.6.2
#> Warning: package 'purrr' was built under R version 3.6.2
id <- c(1:20)
YEAR <- c(2009,2009,2009,2009,2010,2010,2010,2010,2011,2011,2011,2011,2012,2012,2012,2012,2013,2013,2013,2013)
df1 <- data.frame(id,YEAR)
df1
#>    id YEAR
#> 1   1 2009
#> 2   2 2009
#> 3   3 2009
#> 4   4 2009
#> 5   5 2010
#> 6   6 2010
#> 7   7 2010
#> 8   8 2010
#> 9   9 2011
#> 10 10 2011
#> 11 11 2011
#> 12 12 2011
#> 13 13 2012
#> 14 14 2012
#> 15 15 2012
#> 16 16 2012
#> 17 17 2013
#> 18 18 2013
#> 19 19 2013
#> 20 20 2013
df1 <- df1 %>% dplyr::filter(YEAR == 2009|2010)
df1
#>    id YEAR
#> 1   1 2009
#> 2   2 2009
#> 3   3 2009
#> 4   4 2009
#> 5   5 2010
#> 6   6 2010
#> 7   7 2010
#> 8   8 2010
#> 9   9 2011
#> 10 10 2011
#> 11 11 2011
#> 12 12 2011
#> 13 13 2012
#> 14 14 2012
#> 15 15 2012
#> 16 16 2012
#> 17 17 2013
#> 18 18 2013
#> 19 19 2013
#> 20 20 2013

预期结果是:

df1 <- df1 %>% dplyr::filter(YEAR == 2009|2010)
df1
#>    id YEAR
#> 1   1 2009
#> 2   2 2009
#> 3   3 2009
#> 4   4 2009
#> 5   5 2010
#> 6   6 2010
#> 7   7 2010
#> 8   8 2010

以下工作过滤单个条件:

df1 <- df1 %>% dplyr::filter(YEAR == 2009)
df1
#>   id YEAR
#> 1  1 2009
#> 2  2 2009
#> 3  3 2009
#> 4  4 2009

【问题讨论】:

    标签: r filter dplyr


    【解决方案1】:

    我们可以对多个元素使用%in% 而不是==

    library(dplyr)
    df1 %>% 
        dplyr::filter(YEAR %in% c(2009, 2010))
    

    |,我们需要重复

    df1 %>%
        dplyr::filter(YEAR == 2009|YEAR == 2010)
    

    任何大于 0 的值与另一个值,给出TRUE

    2019|2020
    #[1] TRUE
    
    0|0
    #[1] FALSE
    

    【讨论】:

    • 我想这一定是我忽略的一些简单的事情。为我的无知道歉。
    【解决方案2】:

    我认为你的方式也适用于......

    df1 <- df1 %>% dplyr::filter(YEAR == 2009|YEAR == 2010)
    

    我认为它是两个独立的论点。如果您单独使用每个,过滤器将起作用。在您提供的YEAR == 2009|2010 中,第二部分将只是filter(2010),这没有意义。

    【讨论】:

    • 完美,谢谢。我将 akrun 的回复指定为指定答案,因为它提供了两种可能的解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2021-09-07
    • 2019-09-04
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多