gtsummary:多个连续变量作为列,然后按两个分类变量分层
gtsummary: multiple continuous variables as columns and than stratify by two categorial variables
我试图用一个分类变量来总结三个连续变量。
这是一些虚拟数据:
test <-
data.frame(
score_1= sample(c("low","medium","high"),50, replace = T),
land=rnorm(50,5,1),
water=rnorm(50,300,1),
fire=rnorm(50,3,1)
)
我可以很容易地按三分位数对数据进行分层:
table<- test %>%
tbl_summary(
by=score_1,
statistic = all_continuous()~ "{mean} ({sd})"
) %>%
print()
这将使这个 table:
但是我需要转置这个table:连续变量需要是列。
这样做的原因是我实际上还有两个分数要添加,所以数据实际上是这样的:
test2 <-
data.frame(
score_1= sample(c("low","medium","high"),50, replace = T),
score_2= sample(c("low","medium","high"),50, replace = T),
score_3= sample(c("low","medium","high"),50, replace = T),
land=rnorm(50,5,1),
water=rnorm(50,300,1),
fire=rnorm(50,3,1)
)
我想创建三个 table,每个得分一个(以连续变量作为列),然后使用 tbl_stack 合并三个。但我不知道如何制作第一个 table(如果 gtsummary 可能的话)。
希望这是有道理的。
在 gtsummary 的下一版本 (v.1.5.0) 中,该软件包将具有一个功能,旨在创建与您请求的表格一样的表格。在审查该新功能时,您可以使用 bstfun 包(在 GitHub 上)中的类似(但不那么容易使用)的功能。 bstfun 是一些 gtsummary 函数诞生的包,当它们成熟时,它们被迁移到 gtsummary。下面的示例代码!
# remotes::install_github("ddsjoberg/bstfun")
library(gtsummary)
test <-
data.frame(
score_1= sample(c("low","medium","high"),50, replace = T),
land=rnorm(50,5,1),
water=rnorm(50,300,1),
fire=rnorm(50,3,1),
all_one = 1L
)
df_pvalues <-
c("land", "water", "fire") %>%
purrr::imap_dfc(
~aov(
formula = glue::glue("{.x} ~ score_1") %>% as.formula(),
data = test
) %>%
broom::tidy() %>%
dplyr::slice(1) %>%
dplyr::select(p.value) %>%
dplyr::mutate_all(style_pvalue) %>%
setNames(glue::glue("stat_1_{.y}"))
) %>%
mutate(label = "ANOVA p-value")
df_pvalues
#> # A tibble: 1 x 4
#> stat_1_1 stat_1_2 stat_1_3 label
#> <chr> <chr> <chr> <chr>
#> 1 0.12 0.6 >0.9 ANOVA p-value
tbl <-
c("land", "water", "fire") %>%
purrr::map(
~test %>%
bstfun::tbl_2way_summary(score_1, all_one, con = all_of(.x),
statistic = "{mean} ({sd})") %>%
modify_header(all_stat_cols() ~ paste0("**", .x, "**"))
) %>%
tbl_merge() %>%
modify_spanning_header(everything() ~ NA) %>%
modify_table_body(
~.x %>%
dplyr::bind_rows(df_pvalues)
)
由 reprex package (v2.0.1)
于 2021-08-25 创建
我试图用一个分类变量来总结三个连续变量。 这是一些虚拟数据:
test <-
data.frame(
score_1= sample(c("low","medium","high"),50, replace = T),
land=rnorm(50,5,1),
water=rnorm(50,300,1),
fire=rnorm(50,3,1)
)
我可以很容易地按三分位数对数据进行分层:
table<- test %>%
tbl_summary(
by=score_1,
statistic = all_continuous()~ "{mean} ({sd})"
) %>%
print()
这将使这个 table:
但是我需要转置这个table:连续变量需要是列。 这样做的原因是我实际上还有两个分数要添加,所以数据实际上是这样的:
test2 <-
data.frame(
score_1= sample(c("low","medium","high"),50, replace = T),
score_2= sample(c("low","medium","high"),50, replace = T),
score_3= sample(c("low","medium","high"),50, replace = T),
land=rnorm(50,5,1),
water=rnorm(50,300,1),
fire=rnorm(50,3,1)
)
我想创建三个 table,每个得分一个(以连续变量作为列),然后使用 tbl_stack 合并三个。但我不知道如何制作第一个 table(如果 gtsummary 可能的话)。 希望这是有道理的。
在 gtsummary 的下一版本 (v.1.5.0) 中,该软件包将具有一个功能,旨在创建与您请求的表格一样的表格。在审查该新功能时,您可以使用 bstfun 包(在 GitHub 上)中的类似(但不那么容易使用)的功能。 bstfun 是一些 gtsummary 函数诞生的包,当它们成熟时,它们被迁移到 gtsummary。下面的示例代码!
# remotes::install_github("ddsjoberg/bstfun")
library(gtsummary)
test <-
data.frame(
score_1= sample(c("low","medium","high"),50, replace = T),
land=rnorm(50,5,1),
water=rnorm(50,300,1),
fire=rnorm(50,3,1),
all_one = 1L
)
df_pvalues <-
c("land", "water", "fire") %>%
purrr::imap_dfc(
~aov(
formula = glue::glue("{.x} ~ score_1") %>% as.formula(),
data = test
) %>%
broom::tidy() %>%
dplyr::slice(1) %>%
dplyr::select(p.value) %>%
dplyr::mutate_all(style_pvalue) %>%
setNames(glue::glue("stat_1_{.y}"))
) %>%
mutate(label = "ANOVA p-value")
df_pvalues
#> # A tibble: 1 x 4
#> stat_1_1 stat_1_2 stat_1_3 label
#> <chr> <chr> <chr> <chr>
#> 1 0.12 0.6 >0.9 ANOVA p-value
tbl <-
c("land", "water", "fire") %>%
purrr::map(
~test %>%
bstfun::tbl_2way_summary(score_1, all_one, con = all_of(.x),
statistic = "{mean} ({sd})") %>%
modify_header(all_stat_cols() ~ paste0("**", .x, "**"))
) %>%
tbl_merge() %>%
modify_spanning_header(everything() ~ NA) %>%
modify_table_body(
~.x %>%
dplyr::bind_rows(df_pvalues)
)