2016-06-02 2 views
2

Предположим, что у меня есть следующие данные,фильтр пропорции больше, чем число в Dplyr R

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 a s, я хочу удалить все 4 записи, соответствующие пропорциям менее 25. Выход должен содержать 28 записей вместо 32. Можно ли отфильтровать все записи, соответствующие пропорциям?

ответ

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 
Смежные вопросы