【问题标题】:group data and filter groups by two columns (dplyr)按两列分组数据和过滤组(dplyr)
【发布时间】:2018-06-02 02:21:10
【问题描述】:

我有一个关于使用dplyr 过滤数据集的问题。

我想通过RestaurantIDfilter() 将数据分组到wage >= 5Year==1992 中的所有组。

例如:

我有:

 RestaurantID     Year        Wage
     1             92          6
     1             93          4
     2             92          3
     2             93          4
     3             92          5
     3             93          5

我想要的数据集(它保留了 1992 年工资值 >= 5 的所有组)

 RestaurantID     Year        Wage
     1             92          6
     1             93          4
     3             92          5
     3             93          5

我试过了:

data %>% group_by("RestaurantID") %>% filter(any(Wage>= '5', Year =='92')) 

但这给了我工资为>=5的所有行。

【问题讨论】:

    标签: r filter group-by dplyr


    【解决方案1】:

    如果您希望返回该组的所有行,则可以为每个 ID 设置一个 TRUE 值。在这种情况下,TRUE 值将被回收到该组的长度,因此返回所有行。

    df %>% group_by(RestaurantID) %>% filter(Wage[Year == 92] >= 5)
    ## A tibble: 4 x 3
    ## Groups:   RestaurantID [2]
    #  RestaurantID  Year  Wage
    #         <int> <int> <int>
    #1            1    92     6
    #2            1    93     4
    #3            3    92     5
    #4            3    93     5
    

    请注意,在比较数字时,您不应将它们像“5”一样放在引号中,因为这会将数字转换为字符。

    或者,您可以将原来的方法修改为:

    df %>% group_by(RestaurantID) %>% filter(any(Wage >= 5 & Year == 92))
    

    它也返回正确的子集。

    【讨论】:

      【解决方案2】:

      我们可以在不使用filter 分组的情况下做到这一点

      library(dplyr)
      df1 %>% 
          filter(RestaurantID %in% RestaurantID[Year==92 & Wage>= 5])
      #   RestaurantID Year Wage
      #1            1   92    6
      #2            1   93    4
      #3            3   92    5
      #4            3   93    5
      

      或与base R相同的逻辑

      subset(df1, RestaurantID %in% RestaurantID[Year==92 & Wage>= 5])
      #   RestaurantID Year Wage
      #1            1   92    6
      #2            1   93    4
      #5            3   92    5
      #6            3   93    5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        • 1970-01-01
        • 2017-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多