tidyverse分组,将小团体合并为“其他”

时间:2019-05-21 22:02:34

标签: r dplyr tidyverse

假设我要总结一个数据框列:

> starwars %>% count(eye_color)
# A tibble: 15 x 2
   eye_color         n
   <chr>         <int>
 1 black            10
 2 blue             19
 3 blue-gray         1
 4 brown            21
 5 dark              1
 6 gold              1
 7 green, yellow     1
 8 hazel             3
 9 orange            8
10 pink              1
11 red               5
12 red, blue         1
13 unknown           3
14 white             1
15 yellow           11

有很多小类别,例如“蓝灰色”或“粉红色”。我想将它们全部合并为“其他”。有一个多步骤的过程可以做到这一点:

starwars %>%
add_count(eye_color) %>%
mutate(eye_color = if_else(n < 5, "other", eye_color)) %>%
count(eye_color)

还有一种方法可以通过单个命令来完成。我以前在某个地方见过这个技巧,但现在找不到了。

1 个答案:

答案 0 :(得分:1)

撰写@Jordan的建议:

已更新:已通过Camille修复:

starwars %>%  mutate(eye_color_grp = as.factor(eye_color) %>%
                       forcats::fct_lump_min(min = 5, other_level = "Other")) %>%
  count(eye_color_grp, sort = TRUE) 

链接:https://forcats.tidyverse.org/reference/fct_lump.html