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

gtsummary升级后inline_text无法按列名调用?求解答

gtsummary升级后inline_text()列调用方式变更问题解答

问题描述

使用tbl_summary()生成统计表格后,通过inline_text()提取结果时遇到以下问题:

  • gtsummary升级前,可直接通过列名(如"nonspecific")指定column参数调用
  • 升级后必须改用"stat_1"这类标识才能生效,但完整表格打印时列标签显示正常
  • 同时想了解因子变量用于inline_text()的要求

可复现代码:

Children2 <- tibble(
  "MTS_specific" = as_factor(sample(c("specific","nonspecific"), 100,T)),
  "Age_INT" = sample(1:18, 100,T),
  "Geschlecht_FCT" = as_factor(sample(c("male","female"), 100,T)),
  "AK_Entl_DT" =sample(1:180, 100,T)
)

results2 <- Children2 |>
  select("Diagramm" = MTS_specific, AK_Entl_DT, Age_INT, "Gender"=Geschlecht_FCT) |>
  tbl_summary(by="Diagramm")

# 可行的调用方式
inline_text(results2, variable = "Age_INT", column = "stat_1", pattern= "{median}")

# 升级前可行、现在失效的期望调用方式
inline_text(results2, variable = "Age_INT", column = "nonspecific", pattern= "{median}")

问题解答

1. inline_text()列调用方式变更的原因

gtsummary升级后,inline_text()的column参数逻辑调整为优先识别表格内部的统计列标识符(如stat_1、stat_2),而非显示用的列标签。这个变更主要是为了:

  • 避免列标签重复时的调用歧义:如果多个列有相同显示标签,用内部标识符能精准定位
  • 统一API逻辑:让inline_text()与其他gtsummary工具函数(如modify_column_*系列)的参数逻辑保持一致,这些函数同样依赖内部标识符而非显示标签

2. 因子变量用于inline_text()的要求

  • 因子变量的水平必须在tbl_summary()的分组(by参数)中被正确识别:确保用于分组的因子变量水平完整且无缺失
  • 调用时如果要指定因子水平对应的列,需通过内部统计列标识符(如stat_1对应第一个因子水平,stat_2对应第二个),而非直接用因子水平名称
  • 如果需要用因子水平名称来调用,可以先通过get_estimates(results2)查看统计列的映射关系,再进行匹配调用

3. 恢复用列标签调用的替代方案

如果想继续使用显示标签(如"nonspecific")调用,可以通过以下步骤实现:

  1. 提取表格的列映射关系:
col_map <- tibble(
  label = results2$table_header$label[grepl("stat_", results2$table_header$column)],
  column = results2$table_header$column[grepl("stat_", results2$table_header$column)]
)
  1. 根据标签匹配对应的内部列名:
target_col <- col_map$column[col_map$label == "nonspecific"]
  1. 传入inline_text():
inline_text(results2, variable = "Age_INT", column = target_col, pattern= "{median}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:45:10