Тидиверс группировка, объединяющая малые группы в «другие» - PullRequest
0 голосов
/ 22 мая 2019

Допустим, я хочу обобщить определенный столбец фрейма данных:

> 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 Ответ

1 голос
/ 22 мая 2019

Запись @ предложения Джордана:

Обновлено: исправлено Камиллой:

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

...