Dplyr:如何仅使用 dplyr 将频率小于 1% 的组重新编码为 "other" 类别

Dplyr: How to recode groups that have frequency less than 1% into "other" category using only dplyr

我正在寻找一种方法来执行以下操作: 我有数据:

group_name
A
A
..[50 A's]
B
B 
..[50 B's]
C [only 1]

我可能有很多类别像C,想做一个饼图。为了方便查看者,我需要对组进行重新分类,以便将频率较低的值重新编码为 "others",仅用于绘图。我想用 dplyr 来做这个,比如:

dfd %>% group_by(category) %>% summarise(n=n()) %>% recategorize(function(x) { if (x$n < 10) { "other" } else { x$category } }

有人知道怎么做吗?

这应该有效,

DF %>% 
  group_by(group_name) %>% 
  mutate(new_group_name = ifelse(n()>10, group_name, 'others'))

然后只需使用 new_group_name 做你的总结

谢谢,看完你的代码,我得出了令我满意的答案:

summ <- dt  %>% group_by(group_name) %>% 
  mutate(groups_over10 = ifelse(n() > floor(nrow(.) * 0.01), as.character(group_name), "other")) %>% ungroup() %>% 
  group_by(groups_over10) %>% summarise(n=n())
pie(summ$n,labels = summ$groups_over10)

诀窍是您必须取消 group_by 的结果分组,然后按新计算的变量分组。谢谢!