如何为tbl_summary汇总表添加总数据集占比行
问题
我正在为数据框data2创建汇总表,按Group列分组汇总,使用的代码如下:
data2 %>% tbl_summary(by=Group)
data2是data1的子集,我希望在汇总表中添加一行“% of total”,展示每个分组占完整数据集data1的百分比,计算公式为:
GroupA <- (sum(data2$Group == "GroupA")/nrow(data1))*100 GroupB <- (sum(data2$Group == "GroupB")/nrow(data1))*100 GroupC <- (sum(data2$Group == "GroupC")/nrow(data1))*100 GroupD <- (sum(data2$Group == "GroupD")/nrow(data1))*100
当前汇总表包含Age、Female特征的分组统计,我尝试过add_stat函数,但它仅能添加列而非行,请问该如何实现?
附样本数据:
# A tibble: 15 × 3 Group Female Age <chr> <lgl> <dbl> 1 GroupC TRUE 97 2 GroupD FALSE 96 3 GroupD TRUE 74 4 GroupA TRUE 102 5 GroupA FALSE 68 6 GroupB FALSE 92 7 GroupA FALSE 100 8 GroupD TRUE 89 9 GroupB TRUE 102 10 GroupB FALSE 92 11 GroupA TRUE 85 12 GroupD TRUE 64 13 GroupC FALSE 89 14 GroupB TRUE 84 15 GroupC FALSE 88
解决方案
可以利用gtsummary包的modify_table_body函数手动添加目标行,具体实现如下:
方法1:先计算占比再合并到表中
library(gtsummary) library(dplyr) # 计算各分组占data1的百分比,整理成符合表格结构的数据框 group_pct <- tibble( variable = "% of total", var_type = "categorical", row_type = "label", GroupA = (sum(data2$Group == "GroupA")/nrow(data1))*100, GroupB = (sum(data2$Group == "GroupB")/nrow(data1))*100, GroupC = (sum(data2$Group == "GroupC")/nrow(data1))*100, GroupD = (sum(data2$Group == "GroupD")/nrow(data1))*100 ) # 生成原始汇总表并添加占比行 data2 %>% tbl_summary(by = Group) %>% modify_table_body(~ bind_rows(., group_pct)) %>% # 格式化百分比列,保留1位小数 modify_fmt_fun( columns = starts_with("Group"), rows = variable == "% of total", fmt_fun = ~ style_percent(.x/100, digits = 1) )
方法2:直接在表格修改步骤中计算占比
如果不想单独生成占比数据框,可以直接在modify_table_body中完成计算:
library(gtsummary) library(dplyr) data2 %>% tbl_summary(by = Group) %>% modify_table_body( ~ bind_rows( ., tibble( variable = "% of total", var_type = "categorical", row_type = "label", GroupA = (sum(data2$Group == "GroupA")/nrow(data1))*100, GroupB = (sum(data2$Group == "GroupB")/nrow(data1))*100, GroupC = (sum(data2$Group == "GroupC")/nrow(data1))*100, GroupD = (sum(data2$Group == "GroupD")/nrow(data1))*100 ) ) ) %>% modify_fmt_fun( columns = starts_with("Group"), rows = variable == "% of total", fmt_fun = ~ style_percent(.x/100, digits = 1) )
两种方法都能在汇总表末尾添加一行“% of total”,展示各分组相对于完整数据集data1的占比。
内容的提问来源于stack exchange,提问作者katkat
相关产品推荐
相关产品推荐

