Допустим, я хочу обобщить определенный столбец фрейма данных:
> 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)
Есть также способ сделать это с помощью одной команды. Где-то я уже видел этот трюк, но теперь не могу найти.
Написание предложения @Jordan:
Обновлено: с исправлением Камиллы:
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
Взгляните на документы для этой функции: fct_lump
с n = 5
сохраняет 5 наиболее часто встречающихся уровней, тогда как fct_lump_min
с min = 5
сохраняет уровни, которые появляются не менее 5 раз. Последнее соответствует утверждению OP if_else
.
Вы действительно можете пропустить as.factor()
.
Вы думаете о
forcats::fct_lump
?