Мы могли бы использовать fct_lump_n
из forcats
library(dplyr)
library(forcats)
data %>%
mutate(dept = fct_lump_n(dept, n = 52))
# dept
#1 s
#2 TT
#3 H
#4 I
#5 C
#6 j
#7 DD
#8 BB
#9 UU
#10 h
#11 DD
#12 Other
#13 h
#14 Other
#15 K
#16 u
#17 Other
#18 u
#19 h
#20 XX
#...
Если мы используем метод OP, один из вариантов - replace
исходный 'dept' на основе значений в ' dept 'извлекается после top_n
d1 <- data %>%
group_by(dept) %>%
summarise(n()) %>%
top_n(53) %>%
pull(dept)
data %>%
mutate(dept = replace(dept, !dept %in% d1, 'Others'))
data
set.seed(24)
data <- data.frame(dept = sample(c(letters, LETTERS, paste0(LETTERS, LETTERS)),
500, replace = TRUE), stringsAsFactors = FALSE)