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()
提供了提示
工作原理如下:
- 像你一样先使用
tbl_merge
- 然后在table的每个变量行中使用
tbl_split
。你会得到一个列表。
- 为列表元素指定名称
- 然后按您希望的顺序使用
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))
考虑以下示例:
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)
)
)
很明显,@Daniel D. Sjoberg 的解决方案是最好的。 但这里有一个我认为更灵活的替代策略。
Daniel D. Sjoberg 使用 tbl_stack()
工作原理如下:
- 像你一样先使用
tbl_merge
- 然后在table的每个变量行中使用
tbl_split
。你会得到一个列表。 - 为列表元素指定名称
- 然后按您希望的顺序使用
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))