tbl_merge:在合并的 tbl_regression 模型中按字母顺序对变量进行排序 {gtsummary}

tbl_merge: sort variables alphabetically in merged tbl_regression models {gtsummary}

考虑以下示例:

library(tidyverse)
library(gtsummary)

    t1 <- trial %>%
      na.exclude() %>%
      lm(marker ~ age + ttdeath, .) %>%
      tbl_regression()
    t2 <- trial %>%
      na.exclude() %>%
      lm(marker ~ age + response + death, .) %>%
      tbl_regression()
    t3 <- trial %>%
      na.exclude() %>%
      lm(marker ~ age + stage + death, .) %>%
      tbl_regression()
    t4 <- trial %>%
      na.exclude() %>%
      lm(marker ~ stage + grade + death, .) %>%
      tbl_regression()
    
    tbl_merge(list(t1, t2, t3 ,t4))

在特征选项卡中,变量仅在特定模型中按字母顺序排列。 例如,只看 Table 1 就可以,它是 A-M-T。

但是,同时查看多个表格时,顺序不是按字母顺序排列的。 有没有办法在所有表中按字母顺序对变量进行排序?

E.g. Age, Grade, Months to Death/Censor, Patient Died...

我假设这样做的方法是将 gtsummary::modify_table_body 转换为 dplyr::arrange, 但我不知道具体怎么做。

如有任何帮助,我们将不胜感激。提前致谢。

编辑:其实,反正手动修改变量的顺序也有帮助,太难就忽略这个。

Edit2:我忘了提到还有一目了然的统计信息,比如 add_glance_table(adj.r.squared) %>% modify_table_body(~.x %>% arrange(row_type == "glance_statistic"))(在这个例子中没有),所以我想有可能是变量的排序与浏览统计的顺序也是如此。对不起,让事情变得复杂了,但这将非常有帮助。

您说得对,modify_table_body() 是正确的选择。您首先要安排顺序,将 glance table 放在底部,然后按 "var_label" 安排,将变量按字母顺序排列。 "var_label".$table_body 中的一列。示例如下!

library(gtsummary)
packageVersion("gtsummary")
#> [1] '1.5.0'

t1 <- trial %>%
  lm(marker ~ age + ttdeath, .) %>%
  tbl_regression() %>%
  add_glance_table(adj.r.squared)
t2 <- trial %>%
  lm(marker ~ age + response + death, .) %>%
  tbl_regression() %>%
  add_glance_table(adj.r.squared)
t3 <- trial %>%
  lm(marker ~ age + stage + death, .) %>%
  tbl_regression() %>%
  add_glance_table(adj.r.squared)
t4 <- trial %>%
  lm(marker ~ stage + grade + death, .) %>%
  tbl_regression() %>%
  add_glance_table(adj.r.squared)

tbl <- 
  tbl_merge(list(t1, t2, t3 ,t4)) %>%
  modify_table_body(
    ~.x %>% 
      dplyr::arrange(
        row_type == "glance_statistic", # sort glance table to bottom
        var_label                       # sort by the variable label (a hidden column) 
      )
  )

reprex package (v2.0.1)

创建于 2021-12-19

很明显,@Daniel D. Sjoberg 的解决方案是最好的。 但这里有一个我认为更灵活的替代策略。

Daniel D. Sjoberg 使用 tbl_stack()

提供了提示

工作原理如下:

  1. 像你一样先使用tbl_merge
  2. 然后在table的每个变量行中使用tbl_split。你会得到一个列表。
  3. 为列表元素指定名称
  4. 然后按您希望的顺序使用 tbl_stack
library(tidyverse)
library(gtsummary)

x <- tbl_merge(list(t1, t2, t3 ,t4))

y <- x %>% 
  tbl_split(variables = c(age, ttdeath, response, death, stage, grade)) 

age <- y[[1]]
ttdeath <- y[[2]]
response <- y[[3]]
death <- y[[4]]
stage <- y[[5]]
grade <- y[[6]]

tbl_stack(list(age, grade, ttdeath, death, response, stage))