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

使用gtsummary的tbl_merge合并tbl_regression表时如何指定顺序

解决方案

有两种常用方法可以实现按指定顺序合并回归表:

方法1:合并后直接调整列顺序(最简单)

你之前转成gt对象后调整失败的原因是gt会重命名内部列,和gtsummary原始列名不匹配,直接在tbl_merge返回的gtsummary对象上使用自带的modify_cols_move()函数调整即可,匹配你传入的列表顺序就可以得到预期结果。
示例代码:

# 先按你指定的顺序合并表格
merged_tbl <- tbl_merge(list(t2, t4, t3, t1))

# 按传入顺序调整列位置,列名规则为「表序号_原列名」,回归结果默认列名为estimate、ci、p.value
merged_tbl %>%
  modify_cols_move(
    c(
      "estimate_1", "ci_1", "p.value_1", # 对应第一个传入的t2
      "estimate_2", "ci_2", "p.value_2", # 对应第二个传入的t4
      "estimate_3", "ci_3", "p.value_3", # 对应第三个传入的t3
      "estimate_4", "ci_4", "p.value_4"  # 对应第四个传入的t1
    ),
    .after = "label" # 所有结果列放在变量名(label)列之后
  )

如果不确定列名,可以先运行names(merged_tbl$table_body)查看所有列的实际名称,再对应调整顺序即可。

方法2:合并时强制按传入顺序排列

如果需要同时自定义每个模型的表头标签,可以在合并时直接指定排序逻辑,一步得到预期结果:

tbl_merge(
  tbls = list(t2, t4, t3, t1),
  tab_spanner = c("模型2", "模型4", "模型3", "模型1") # 按传入顺序指定表头标签
) %>%
  # 强制列按模型传入顺序排序
  modify_table_header(
    columns = matches("estimate|ci|p.value"),
    modify_expr = dplyr::expr(dplyr::arrange(
      .,
      as.integer(stringr::str_extract(column, "\\d+$"))
    ))
  )

两种方法都可以稳定输出指定顺序的合并表,不需要转成其他表格对象调整,避免列名不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:15:01