假设我有以下数据,
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
现在我想过滤掉与freq 25相对应的所有条目。例如,如果我将25作为值,我想删除对应于小于25的比例的所有4个条目。输出应该包含,28个条目代替32.是否可以过滤掉与比例相对应的所有条目?
答案 0 :(得分:5)
如果您使用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