如何在R的gtsummary中将主标题移至特征列左侧新列?
gtsummary实现主标题与子项分离的解决方法
核心思路
借助gtsummary的表格修改工具,结合dplyr的数据处理能力,将分类变量的主标题(如Grade、种族)提取为独立新列,同时保留子项(如I/II/III、不同种族类别)在原特征列中,实现主副标题的拆分显示。
代码实现
1. 加载依赖包并构造示例数据
library(gtsummary) library(dplyr) # 构造包含分级变量、人口统计学变量的示例数据 df <- tibble( Grade = factor(c("I", "II", "III", "I", "II"), levels = c("I", "II", "III")), age = rnorm(50, 50, 10), race = factor(c("亚洲人", "白人", "黑人", "亚洲人", "白人"), levels = c("亚洲人", "白人", "黑人")) )
2. 生成初始汇总表
# 按Grade分组生成人口统计学变量的汇总表 initial_tbl <- df %>% tbl_summary( by = Grade, include = c(race, age) )
3. 修改表格结构实现分离
# 拆分主标题与子项,生成目标表格 final_tbl <- initial_tbl %>% modify_table_body( ~ .x %>% # 移除原有的主标题行,后续将主标题放入新列 filter(row_type != "label") %>% # 添加新列,填充对应变量的主标题 mutate(分类主标题 = parent_label) %>% # 将新列移至特征列(label)左侧 relocate(分类主标题, .before = label) ) %>% # 设置列标题,替换为你需要的名称(如"Grade"或"种族") modify_header( 分类主标题 = "**Grade/种族**", label = "**特征**" ) # 查看最终表格 final_tbl
自定义调整说明
- 如果仅需针对特定变量(如仅处理种族)拆分,可在
mutate中添加条件筛选:mutate( 分类主标题 = case_when( parent_label == "种族" ~ parent_label, TRUE ~ label ) ) - 若原表格中主标题与子项有特定分隔符(如换行、短横线),可结合
stringr包的str_split()或str_remove()函数进一步清洗特征列内容。
内容的提问来源于stack exchange,提问作者cake2244
相关产品推荐
相关产品推荐

