Классифицируйте большой фактор на маленькие факторы, основываясь на частоте, оставляя записи как «Другие». - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть большой фактор (имя df $) с более чем 1000 факторами. Что мне нужно, так это 10-15 лучших факторов по частоте, а остальные факторы объединяются в «другие»

Я пытался использовать следующую команду, но безуспешно: df $ name <- уровни (df $ name) [which (таблица (df $ name) <1000000)] <- "Others" </p>

PS: я использую подсчет частоты, так как я не хочу ограничивать себя определенным количеством факторов здесь. Я счастлив, если получу где-нибудь 5-20 главных факторов (по частоте), а остальные из них будут объединены в «Прочие» для простой визуализации.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

Вот столбец в фрейме данных с 2000 факторами:

df <- data.frame(names = sample(1:2000, 1E6, replace = T))
df$names <- as.factor(df$names)

И здесь добавлена ​​новая переменная, которая сохраняет верхние 15 и помещает остаток в «Другое».

df$names_lump = forcats::fct_lump(df$names, n = 15)
0 голосов
/ 28 апреля 2019

Прежде всего, я бы посчитал частоту имен, используя table() & top_n(), чтобы указать 15 лучших (или 10) имен в вашем наборе данных. (Я содержал их в top_15_names объекте.) После этого я создал столбец name_category, чтобы показать группы имен, используя mutate(). Вот как бы я это сделал.

df$name = as.factor(df$name)
top_15 = data.frame(table(df$name)) %>% 
  arrange(desc(Freq)) %>% 
  top_n(15)
top_15_names = top_15$Var1

dat = df %>% 
  mutate(name_category = case_when(
    name %in%  top_15_names ~ "Top15",
    TRUE ~ "Others"
  ))

Надеюсь, вы найдете это полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...