Реклассифицировать атрибуты, составляющие менее x% от общего числа, как «другие»

#r #filter #dplyr

#r #Фильтр #dplyr

Вопрос:

Хорошо, итак, у меня есть данные как так:

 ID      Name  Job
001     Bill  Carpenter
002    Wilma  Lawyer
003  Greyson  Lawyer
004    Eddie  Janitor
  

Я хочу сгруппировать их вместе для анализа, чтобы любое задание, которое отображается менее x процентов от общего числа, было сгруппировано в «Другое»

Как я могу это сделать, вот что я пробовал:

 df %>%
  group_by(Job) %>%
  summarize(count = n()) %>%
  mutate(pct = count/sum(count)) %>% 
  arrange(desc(count)) %>% 
  drop_na()
  

И теперь я знаю, каковы проценты, но как мне интегрировать это в исходные данные, чтобы сделать все, что ниже X, «Другим». (допустим, менее или равный 25% — это другое).

Может быть, есть более простой способ….

Ответ №1:

Вы можете попробовать это :

 library(dplyr)

df %>%
  count(Job) %>%
  mutate(n = n/sum(n)) %>%
  left_join(df, by = 'Job') %>%
  mutate(Job = replace(Job, n <= 0.25, 'Other'))
  

Чтобы интегрировать наши вычисления в исходные данные, мы делаем left_join , а затем replace значения.