如何在gtsummary的tbl_summary中为变量标签添加单位?
解决gtsummary::tbl_summary()自定义带单位变量标签的问题
你当前代码里的label参数写法有误:~后面的.指代整个数据集,而非单个变量,因此无法正确提取每个变量的units属性。以下是修正方案:
核心思路
- 遍历目标变量,逐个判断是否存在
units属性 - 对带单位的变量,将标签与单位拼接成规范格式;无单位的变量直接使用原标签
- 把生成的标签列表传入
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
相关产品推荐
相关产品推荐

