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 创建