使用GTSUMMARY创建多层缩进汇总表的技术咨询
使用gtsummary生成双层缩进汇总表的问题及解决方法
问题背景
我希望使用GTSUMMARY生成带有两层缩进的汇总表,因未找到tbl_summary实现多层缩进的方法,已尝试用tbl_hierarchical编写对应代码,当前tbl.hrch已生成预期表体,但存在两个问题:
- 是否可不操作
tbl.hrch$table_body元数据实现需求? - 能否自定义变量排序,而非默认的字母顺序(当前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
相关产品推荐
相关产品推荐

