首页 > 解决方案 > 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)
  ) 

我可以轻松地按三分位数对数据进行分层:

table<- test %>% 
  tbl_summary(
    by=score_1,
    statistic = all_continuous()~  "{mean} ({sd})"
  ) %>% 
  print()

这将使这张表:

在此处输入图像描述

但是我需要转置这张表:连续变量需要是列。原因是我实际上还有两个分数要添加,所以数据实际上是这样的:

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)
  ) 

我想创建三个表,每个分数一个(将连续变量作为列),然后使用 tbl_stack 合并三个表。但我不知道如何制作第一张桌子(如果使用 gtsummary 甚至可能的话)。希望这是有道理的。

标签: rgtsummary

解决方案


在 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 包于 2021-08-25 创建(v2.0.1)


推荐阅读