You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在gtsummary::tbl_strata()中生效modify_spanning_header()设置

在tbl_strata中保留tbl_summary的表头修改方案

要解决tbl_strata迁移tbl_summary中modify_header、modify_spanning_header等修改的问题,核心是分阶段处理表头调整,利用gtsummary的选择器适配分层后的列结构,具体操作如下:

核心思路

  1. 子表格内修改:在tbl_strata的.tbl_fun参数中,针对每个分层生成的tbl_summary完成基础表头修改(包括列头、子表格跨列)。
  2. 整体表格修改:在tbl_strata调用结束后,统一调整整个分层表格的跨列表头或全局样式,避免硬编码列名导致报错。

完整示例代码(基于trial数据集)

library(gtsummary)

# 按grade分层,每层内按trt分组生成描述统计表格,并保留表头定制
trial %>%
  tbl_strata(
    strata = grade,
    .tbl_fun = function(data) {
      # 生成子表格并完成基础表头修改
      data %>%
        tbl_summary(
          by = trt,
          include = c(age, marker, response),
          # 自定义统计量格式
          statistic = list(
            age ~ "{mean} ({sd})",
            marker ~ "{median} ({p25}, {p75})",
            response ~ "{n} ({p}%)"
          )
        ) %>%
        # 修改子表格内每个统计列的表头
        modify_header(all_stat_cols() ~ "**{level}**") %>%
        # 给子表格的分组列设置跨列表头
        modify_spanning_header(all_stat_cols() ~ "**Treatment Group**")
    }
  ) %>%
  # 给每个分层组设置全局跨列表头
  modify_spanning_header(
    starts_with("grade_") ~ "**Grade {strata}**"
  ) %>%
  # 移除默认脚注(可选)
  modify_footnote(all_stat_cols() ~ NA) %>%
  # 转换为gt表格并调整宽度
  as_gt() %>%
  gt::tab_options(table.width = "100%")

关键注意事项

  • 避免硬编码列名:分层后统计列的名称会自动带上分层变量的前缀(例如grade_I_Drug A),直接写列名会触发"找不到列"的报错,必须用all_stat_cols()、starts_with()这类选择器动态匹配。
  • 子表格修改的作用范围:.tbl_fun内部的modify_spanning_header只会作用于当前分层的子表格,tbl_strata会自动保留这些修改并组合成最终表格。
  • 全局跨列设置:如果需要给整个表格的分层模块设置跨列,用starts_with("分层变量名_")选择对应列,{strata}会自动替换为分层的具体水平(如I、II、III)。

内容的提问来源于stack exchange,提问作者marie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:40:34