在R语言中为分组统计表格添加百分比列的方法
解决方法
你遇到的问题是因为colSums()是针对数据框列求和的函数,而这里的Number是一个向量,用sum()直接计算总和就能拿到总人数。以下是几种可行的实现方式:
基础实现
直接在统计完数量后,用sum(Number)获取总人数计算百分比:
ind_and_countries %>% group_by(Income_Group) %>% summarise(Number = n()) %>% arrange(desc(Number)) %>% mutate(Percentage = Number / sum(Number) * 100)
明确取消分组(可选)
虽然summarise()默认会取消分组,你也可以用ungroup()明确声明,让逻辑更清晰:
ind_and_countries %>% group_by(Income_Group) %>% summarise(Number = n()) %>% ungroup() %>% arrange(desc(Number)) %>% mutate(Percentage = Number / sum(Number) * 100)
格式化百分比显示
如果需要直接生成带百分号的格式化字符串,可以使用scales包的percent()函数:
library(scales) ind_and_countries %>% group_by(Income_Group) %>% summarise(Number = n()) %>% arrange(desc(Number)) %>% mutate(Percentage = percent(Number / sum(Number)))
原代码失效原因
colSums(Number)会把向量Number当作单列数据框处理,返回的是一个命名向量(例如Number = 总人数),导致Number / colSums(Number)的结果是一个数据框而非数值,无法正确计算百分比。而sum(Number)直接返回总人数的数值,能完成正确的除法运算。
内容的提问来源于stack exchange,提问作者Georgia Bingham
相关产品推荐
相关产品推荐

