在R中如何为crosstab交叉表添加行/列百分比(类似Excel数据透视表)
代码修改方案
你需要把百分比计算逻辑放在数值格式化之前执行,避免数值转字符后无法计算比例,完整可运行代码如下:
library(dplyr) library(janitor) alldata2019_v2 %>% tabyl(agerange, gender) %>% adorn_totals(c("row", "col")) %>% # 计算所需百分比列 mutate( Female_pct = Female / Total, Male_pct = Male / Total, Age_pct = Total / last(Total) ) %>% # 统一格式化输出 mutate( # 计数列添加千分位分隔符 across(c(Female, Male, Total), ~ format(.x, big.mark = ",")), # 百分比列格式化为整数带%后缀 across(ends_with("_pct"), ~ scales::percent(.x, accuracy = 1)) )
可选调整项
- 若不想额外加载
scales包做百分比格式化,可将百分比格式化部分替换为手动实现:across(ends_with("_pct"), ~ paste0(round(.x * 100), "%")) - 若不需要总计行显示百分比,可在最后添加如下代码清空总计行的百分比值:
mutate(across(ends_with("_pct"), ~ ifelse(agerange == "总计", "", .x)))
内容的提问来源于stack exchange,提问作者Daniel Sossa
相关产品推荐
相关产品推荐

