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

如何在gtsummary的tbl_summary中为变量标签添加单位?

解决gtsummary::tbl_summary()自定义带单位变量标签的问题

你当前代码里的label参数写法有误:~后面的.指代整个数据集,而非单个变量,因此无法正确提取每个变量的units属性。以下是修正方案:

核心思路

  1. 遍历目标变量,逐个判断是否存在units属性
  2. 对带单位的变量,将标签与单位拼接成规范格式;无单位的变量直接使用原标签
  3. 把生成的标签列表传入tbl_summary()的label参数

修正后的代码

set.seed(123)
library(tidyverse)
library(gtsummary)

d <- tidyr::tibble(
    id = c(1,2,3,4,5,6,7,8,9,10),
    inf_1 = structure(sample(rnorm(100, mean=42, sd=14), size = 10), label = "Age", units = "years"),
    inf_2 = structure(factor(sample(seq(0,1), size = 10, replace = TRUE), levels = c(0,1), labels = c("Unchecked", "Checked")), label = "BSI"),
)

# 生成带单位的标签列表
var_labels <- map_chr(d %>% select(-id), function(x) {
  if ("units" %in% names(attributes(x))) {
    paste(attr(x, "label"), paste0("(", attr(x, "units"), ")"))
  } else {
    attr(x, "label")
  }
})

d %>%
    gtsummary::tbl_summary(
        include = -id,
        label = var_labels,  # 传入生成的标签列表
        type = list(all_continuous() ~ "continuous2"),
        statistic = list(
            all_continuous() ~ c(
                "{median} ({p25}, {p75})",
                "{min}, {max}"
            ),
            all_categorical() ~ "{n} / {N} ({p}%)"
        )
    ) %>%
    gtsummary::as_gt()

关键修正点

  • 用map_chr()逐个处理变量,确保能正确提取单个变量的label和units属性
  • 用paste()拼接标签与单位,生成更自然的显示格式(如"Age (years)")
  • 直接传入命名标签列表,符合gtsummary的参数规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:27:17