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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:57:06