使用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
相关产品推荐
相关产品推荐

