tbl_summary() 具有长而整洁的数据,其中单个(例如)患者 ID 在因子列中具有多个值

tbl_summary() with long, tidy data where single (e.g.,) patient ID has multiple values in factor column

    library(tidyverse)
    library(gtsummary)

    tibble(patient_id = c("A","A", "A", "B", "B"), 
           disease = c("cancer", "heart disease", "fat fingers", "heart disease", "fat fingers")) %>% 
      select(-patient_id) %>% 
      tbl_summary()

以上是来自 gtsummary 库的 tbl_summary 函数的示例代码和输出。

在这种情况下我有两个病人(A 和 B),我想看看输出结果显示有多少百分比的病人有“胖手指”(应该是 100%),有多少百分比有“心脏病” "(应该是 100%)和患癌症的百分比(应该是 50%),我还希望“N”等于 2。

在 tbl_summary() 中,我看不到有一个选项可以按 id 列进行汇总,例如,所以我唯一的其他选择是 pivot_wider(id_cols = patient_id, values_from....etc.),但是tbl_summary() 输出不会有漂亮的标题和 sub-headings。除此之外,我想我可以从头开始自定义 gt table,但我喜欢 tbl_summary() 的易用性,当有多个因素时它似乎无法正常工作每个 ID 的价值。

典型的 gtsummary table 确实需要宽格式的数据。但是你可以获得你需要的table。您将从为没有列出的疾病的患者添加行开始,然后您可以使用 tbl_summary() 进行总结。您还需要进行一些美学上的修改。示例如下!

library(tidyverse)
library(gtsummary)

tbl <- 
  tibble(patient_id = c("A","A", "A", "B", "B"), 
       disease = c("cancer", "heart disease", "fat fingers", 
                   "heart disease", "fat fingers"), 
       present = TRUE) %>%
  # adding observations for patients without a disease
  complete(patient_id, disease, fill = list(present = FALSE)) %>%
  select(-patient_id) %>% 
  # summarizing data
  tbl_summary(by = present, percent = "row") %>%
  modify_header(stat_2 ~ "**Overall**") %>%
  modify_column_hide(stat_1)

reprex package (v2.0.1)

创建于 2021-11-12