如何使用prop.table函数结合多变量展示计数与百分比?
解决
prop.table计算全局百分比的问题 你的问题出在分组未取消,导致prop.table是在每个opinion分组内计算比例,而非基于所有数据的总数。要实现所有百分比总和为100%,只需在计算百分比前取消分组,或者直接基于全局总数计算:
方法一:取消分组后用prop.table
hey <- data %>% group_by(opinion, owner) %>% summarize(count = n()) %>% ungroup() %>% # 关键:取消所有分组,让prop.table基于全局count计算 mutate(percentage = prop.table(count) * 100)
方法二:直接用总数计算比例(更直观)
如果不想依赖prop.table,可以直接用每个count除以全局总数:
hey <- data %>% group_by(opinion, owner) %>% summarize(count = n()) %>% ungroup() %>% mutate(percentage = (count / sum(count)) * 100)
方法三:用dplyr 1.1.0+的.by参数(无需提前分组)
如果你的dplyr版本是1.1.0及以上,可以简化代码,不用显式group_by:
hey <- data %>% summarize(count = n(), .by = c(opinion, owner)) %>% mutate(percentage = (count / sum(count)) * 100)
修正后的输出示例(以你的数据为例)
假设所有数据总数为148,输出会类似:
opinion owner count percentage <chr> <chr> <int> <dbl> 1 Agree N 22 14.86 2 Agree Y 17 11.49 3 Disagree N 2 1.35 4 Disagree Y 10 6.76 5 Not Sure N 1 0.68 6 Not Sure Y 5 3.38 7 Strongly Agree N 57 38.51 8 Strongly Agree Y 29 19.59 9 Strongly Disagree N 1 0.68 10 Strongly Disagree Y 4 2.70
此时所有百分比的总和为100%。
内容的提问来源于stack exchange,提问作者Axel
相关产品推荐
相关产品推荐

