如何设置gtsummary中Overall列的百分比为按列计算?
解决方案:修改gtsummary表格中Overall列的百分比计算方式
要实现分组列保持行百分比、Overall列使用列百分比的需求,无需合并表格,可通过modify_table_body()直接修改表格的底层数据,重新计算Overall列的百分比。以下是具体步骤和代码:
1. 生成原表格
首先按需求创建初始表格,设置by=species和percent="row",并添加Overall列:
library(gtsummary) library(palmerpenguins) library(dplyr) library(stringr) # 生成初始表格 tbl <- penguins %>% tbl_summary( by = species, percent = "row", include = c(island, sex) # 示例选择分类变量,可根据需求调整 ) %>% add_overall(last = TRUE)
2. 修改Overall列为列百分比
通过modify_table_body()提取每个分类类别的样本数,结合总样本量重新计算列百分比,替换原Overall列的行百分比:
# 获取总样本量(从表格元数据中提取,确保与表格统计一致) total_n <- tbl$meta_data$df_n[1] # 更新Overall列的百分比计算 tbl_updated <- tbl %>% modify_table_body( ~ .x %>% rowwise() %>% mutate( stat_0 = case_when( # 仅针对分类变量的百分比行进行修改 variable %in% c("island", "sex") & str_detect(stat_0, "%") ~ { # 提取当前行的样本数n n_val <- as.numeric(str_extract(stat_0, "^\\d+(?=/)")) # 计算列百分比并格式化 col_pct <- sprintf("%.1f", n_val / total_n * 100) # 重新构造统计字符串(n/总n (百分比%)) paste0(n_val, "/", total_n, " (", col_pct, "%)") }, # 其他行保持原内容不变 TRUE ~ stat_0 ) ) %>% ungroup() ) # 查看最终表格 tbl_updated
原理说明
modify_table_body()允许直接操作gtsummary表格的底层数据框,其中stat_0对应Overall列的统计内容。- 通过正则表达式提取原字符串中的样本数
n,结合总样本量计算列百分比,替换原行百分比的格式。 - 仅针对分类变量的百分比行修改,不影响连续变量或其他统计内容。
内容的提问来源于stack exchange,提问作者missanita
相关产品推荐
相关产品推荐

