【问题标题】:Filter group of rows based on sum of values from different column根据来自不同列的值的总和过滤行组
【发布时间】:2016-09-26 17:18:24
【问题描述】:

我正在尝试过滤掉 R 中的整行,但前提是特定集合的频率加起来不超过 5。

我的数据看起来有点像这样。这是一个我目前称之为“Words”的数据框:

HEADWORD VARIANT FREQUENCY
 SWORD    sword      2
 SWORD    swerd      1
 SWORD    sworde     1
 KNIGHT   knight     6
 KNIGHT   kniht      2
 KNIGHT   knyt       1

我只想要特定词条中频率加起来超过 5 的行。所以在这里,我想保留 KNIGHT 的所有实例,但我想完全摆脱所有 SWORD 行。

我尝试在 dplyr 上执行此操作,但没有成功。这是我试过的代码:

Words1 %>% group_by(HW) %>%  filter(Fr > 5)

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们需要获取'FREQUENCY'的sum,并在'HEADWORD'分组后检查filter中是否大于5

    Words1 %>% 
         group_by(HEADWORD) %>% 
         filter(sum(FREQUENCY) >5)   
    #   HEADWORD VARIANT FREQUENCY
    #     <chr>   <chr>     <int>
    #1   KNIGHT  knight         6
    #2   KNIGHT   kniht         2 
    #3   KNIGHT    knyt         1
    

    【讨论】:

      【解决方案2】:

      你可以使用base Rave函数

      df[ave(df$FREQUENCY, df$HEADWORD, FUN = sum) > 5, ]
      
      #   HEADWORD VARIANT FREQUENCY
      #4   KNIGHT  knight         6
      #5   KNIGHT   kniht         2
      #6   KNIGHT    knyt         1
      

      【讨论】:

        猜你喜欢
        • 2020-01-10
        • 2022-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-09
        • 2018-12-26
        • 2020-02-26
        • 1970-01-01
        相关资源
        最近更新 更多