使用gtsummary如何格式化预计算的汇总统计数据框?
实现方案
可以通过gtsummary便捷实现该需求,复用性优于直接使用gt,多组对比场景下只需少量修改即可扩展。
1. 加载依赖包与构造示例数据
library(dplyr) library(gtsummary) # 构造两组示例统计数据,模拟两种方法的对比结果 stats_df1 <- tribble( ~name, ~est, ~ci.lwr, ~ci.upr, "bias", 1.2, 0.9, 1.5, "loa.upr", 4, 3.5, 4.5, "loa.lwr", -3, -3.5, -2.5 ) stats_df2 <- tribble( ~name, ~est, ~ci.lwr, ~ci.upr, "bias", 0.8, 0.5, 1.1, "loa.upr", 3.2, 2.7, 3.7, "loa.lwr", -2.8, -3.3, -2.3 )
2. 定义复用的表格转换函数
该函数可快速将单个统计数据框转换为符合要求的格式,自动完成CI列合并、行分组、标签设置:
format_stats_tbl <- function(data, group_name) { # 预处理数据:合并CI、设置分组和行标签 preprocessed <- data %>% mutate( # 定义行分组 group = case_when( name == "bias" ~ "偏倚", startsWith(name, "loa") ~ "一致性限(Limits of agreement)" ), # 定义展示用行标签 row_label = case_when( name == "bias" ~ "平均偏倚", name == "loa.upr" ~ "上限", name == "loa.lwr" ~ "下限" ), # 合并95%CI列 `95% CI` = paste0(ci.lwr, ",", ci.upr) ) %>% select(group, row_label, 估计值 = est, `95% CI`) # 转为gtsummary对象 preprocessed %>% as_tbl_summary( label = list(估计值 ~ "估计值", `95% CI` ~ "95% CI"), include = c(估计值, `95% CI`), statistic = list(all_continuous() ~ "{value}") ) %>% # 设置分组行 modify_group_rows(group = group, grouping_variable = group) %>% # 隐藏不需要的默认列 modify_column_hide(c(stat_0)) %>% # 调整列头 modify_header( list(估计值 ~ group_name, `95% CI` ~ group_name) ) }
3. 生成并合并表格
# 生成单组表格 tbl_a <- format_stats_tbl(stats_df1, "方法A") tbl_b <- format_stats_tbl(stats_df2, "方法B") # 并排合并两组表格 final_tbl <- tbl_merge( tbls = list(tbl_a, tbl_b), tab_spanner = c("**方法A**", "**方法B**") ) # 查看最终结果 final_tbl
可选调整
- 如需修改小数保留位数:可在函数中添加
modify_fmt_fun(估计值 ~ function(x) sprintf("%.1f", x))自定义格式 - 如需新增更多对比组:只需新增对应统计数据框,调用函数生成表格后加入
tbl_merge()的tbls参数即可 - 如需调整行分组规则:修改预处理步骤中
group列的判断条件即可
内容的提问来源于stack exchange,提问作者JohannesNE
相关产品推荐
相关产品推荐

