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

使用GTSUMMARY创建多层缩进汇总表的技术咨询

使用gtsummary生成双层缩进汇总表的问题及解决方法

问题背景

我希望使用GTSUMMARY生成带有两层缩进的汇总表,因未找到tbl_summary实现多层缩进的方法,已尝试用tbl_hierarchical编写对应代码,当前tbl.hrch已生成预期表体,但存在两个问题:

  1. 是否可不操作tbl.hrch$table_body元数据实现需求?
  2. 能否自定义变量排序,而非默认的字母顺序(当前ITT行优先,不符合预期)?

问题解答

1. 无需操作table_body实现双层缩进

tbl_hierarchical本身支持通过层级变量映射实现缩进,不需要直接修改元数据。核心是在构建层级结构时,通过hierarchy参数指定父子关系,配合indent参数控制缩进层级:

  • 先准备包含层级结构的数据框,添加分组标识列明确父级和子级变量
  • 在tbl_hierarchical()中,通过hierarchy = list(父级列 ~ 子级列)定义层级,自动生成缩进

示例代码:

library(gtsummary)
library(dplyr)

# 构造带层级关系的数据
data <- trial %>%
  mutate(
    parent_group = case_when(
      variable %in% c("age", "marker") ~ "基线特征",
      variable %in% c("trt", "response") ~ "治疗相关"
    )
  )

# 生成双层缩进的层级汇总表
tbl_hierarchical(
  data = data,
  hierarchy = list(parent_group ~ variable),
  by = trt,
  statistic = list(
    all_continuous() ~ "{mean} ({sd})",
    all_categorical() ~ "{n} ({p}%)"
  ),
  indent = TRUE # 开启自动缩进
)

2. 自定义变量排序

要覆盖默认的字母排序,有两种实用方法:

方法1:提前设置因子水平

在数据预处理阶段,将层级变量(父级/子级)转为因子并指定自定义顺序,tbl_hierarchical会遵循因子水平排列:

data <- data %>%
  mutate(
    # 自定义父级分组顺序
    parent_group = factor(parent_group, levels = c("治疗相关", "基线特征")),
    # 自定义子级变量顺序
    variable = factor(variable, levels = c("trt", "response", "age", "marker"))
  )

方法2:使用modify_table_body调整行顺序

如果不想修改原始数据,可直接通过modify_table_body重新排列表体行:

tbl.hrch %>%
  modify_table_body(
    ~ .x %>%
      arrange(
        match(parent_group, c("治疗相关", "基线特征")),
        match(variable, c("trt", "response", "age", "marker"))
      )
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:05:04