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 的结果分组,然后按新计算的变量分组。谢谢!
我正在寻找一种方法来执行以下操作: 我有数据:
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 的结果分组,然后按新计算的变量分组。谢谢!