如何在gtsummary包的tbl_summary中缩进指定变量行?
在gtsummary的tbl_summary中缩进变量行以体现层级关系
问题背景
我有一个复合变量「Needs Medical Attention」,由「Heart Disease」、「Cancer」等子变量构成——当受试者患有其中任意一种疾病时,该复合变量会被标记为1。希望在表格展示中,通过缩进「Heart Disease」和「Cancer」对应的整行,视觉上体现它们是该复合变量的子类别。
此前用kableExtra的add_indent(c(rows_that_want_indented))可以实现指定行缩进,但在gtsummary的tbl_summary中尝试了多种方法均未生效:
- 在变量标签前添加空格、
会被文本处理机制去除,无法产生缩进效果 - 使用
modify_table_styling()设置text_format = "indent",但该功能仅适用于连续变量统计摘要的子行(如均值与方差、中位数与IQR行),不适用于整个变量对应的行
注:需要缩进的是整个变量对应的行,而非分类变量的类别选项。
解决方案
使用gtsummary的modify_table_styling()函数,通过rows参数定位目标变量行,再用text_indent参数设置缩进距离,即可实现整行缩进。
代码示例
library("tidyverse") library("gtsummary") # 模拟数据 sim_data <- data.frame( number = rnorm(20), heart_disease = c(rep(0, 10), rep(1, 10)), cancer = c(rep(1, 5), rep(0, 5), rep(1, 5), rep(0, 5)) ) # 创建复合变量 sim_data$need_medical_attention <- with(sim_data, ifelse(heart_disease == 1 | cancer == 1, 1, 0)) # 生成表格并设置缩进 tbl_summary(data = sim_data, include = c( number, need_medical_attention, heart_disease, cancer ), label = list( number = "Number", need_medical_attention = "Needs Medical Attention", heart_disease = "Heart disease", cancer = "Cancer" )) %>% # 对指定变量的行设置缩进(单位:像素) modify_table_styling( columns = label, rows = variable %in% c("heart_disease", "cancer"), text_indent = 20 )
方法说明
modify_table_styling()的rows参数通过variable列的变量名精准定位需要缩进的行text_indent参数设置缩进的像素值,可根据视觉需求调整数值- 无需在标签中手动添加空格,避免被gtsummary的文本清理机制过滤
内容的提问来源于stack exchange,提问作者M. Bolt
相关产品推荐
相关产品推荐

