Снизить до 53 класса в столбце R - PullRequest
1 голос
/ 08 мая 2020

У меня есть столбец в наборе данных с классом 66. Я хочу сократить до 53 класса, где лучшие 52 класса будут иметь свое имя, а для остальных я хочу установить как «Другие». Мне удалось найти 52 лучших класса с наибольшей частотой, но я не уверен, как я могу установить «Другие» на класс отдыха 14.

Столбец:

dept Att Jon_sat
 A    Y    2
 C    N    1
 D    N    4
 .    .    .
 .    .    .
 AB   N    3
data %>%
  group_by(dept) %>%
  summarise(n()) %>%
  top_n(53)

1 Ответ

3 голосов
/ 08 мая 2020

Мы могли бы использовать 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)
...