【问题标题】:Filter the proportions greater than a number in Dplyr R在 Dplyr R 中过滤大于数字的比例
【发布时间】:2016-10-02 12:44:40
【问题描述】:

假设我有以下数据,

library(dplyr)
data(mtcars)
mtcars = tbl_dt(mtcars)

我正在使用以下命令,

mtcars %>%
  group_by(am, gear) %>%
  summarise (n = n()) %>%
  mutate(freq = (n / sum(n)) * 100)

我得到以下输出,

am gear  n     freq
 0    3 15      79
 0    4  4      21
 1    4  8      62
 1    5  5      38

现在我想过滤与小于频率 25 的条目对应的所有条目。例如,如果我将 25 作为值,我想删除与小于 25 的比例对应的所有 4 个条目。输出应包含, 28 个条目代替 32 个。是否可以过滤掉所有与比例对应的条目?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    如果您使用 mutate 而不是 summarise 来计算每个组中的行数,则可以在单个链中执行此操作。

    min.freq = 0.25
    
    mtcars %>%
      group_by(am, gear) %>%
      mutate(n = n()) %>% 
      group_by(am) %>%
      filter(n/n() > min.freq) %>% select(-n)
    
        mpg cyl  disp  hp drat    wt  qsec vs am gear carb
    1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
    2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
    3  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
    ...
    26 19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
    27 15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
    28 21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
    

    【讨论】:

      猜你喜欢
      • 2019-07-22
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      相关资源
      最近更新 更多