将变量分组为 tbl_summary() 中的顶级变量

问题描述 投票:0回答:1

我想在 tbl_summary 调用中手动设置变量组。一组变量应单独报告并作为一组报告。 如果我有一个逻辑变量

apple
和一个逻辑变量
banana
,我想报告
apple
banana
的频率,但也报告
fruits
的频率。

请参阅下面的示例,其中数据改编自 dplyr::starwars。 为了便于发布,我在本示例中包含了普通的降价表(不是实际的 tbl_summary 渲染表),但我相信这些很好地解释了我的问题。

示例数据

library(dplyr)
data <-
    starwars |> 
    slice_head(n=20) |> 
    select(gender, sex, eye_color, skin_color, species) |> 
    mutate(male_sex = sex == "male",
           masculine_gender = gender == "masculine",
           human_species = species == "Human",
           blue_eyes = eye_color == "blue",
           light_skin = skin_color == "light",
           .keep = "unused") |> 
    {\(x) filter(x, complete.cases(x))}()  

head(data)
# A tibble: 6 × 5
  male_sex masculine_gender human_species blue_eyes light_skin
  <lgl>    <lgl>            <lgl>         <lgl>     <lgl>     
1 TRUE     TRUE             TRUE          TRUE      FALSE     
2 FALSE    TRUE             FALSE         FALSE     FALSE     
3 FALSE    TRUE             FALSE         FALSE     FALSE     
4 TRUE     TRUE             TRUE          FALSE     FALSE     
5 FALSE    FALSE            TRUE          FALSE     TRUE      
6 TRUE     TRUE             TRUE          TRUE      TRUE      

带有原始数据的普通 tbl_summary() 输出

tbl_summary(data)
特点 N = 191
男_性别 13(68%)
男性_性别 17(89%)
人类_物种 12(63%)
蓝眼睛 6 (32%)
浅_皮肤 4 (21%)

最终表格应该是这样的(注意分层缩进/偏移):

特点 N = 191
任何事情 19(100%)
  男性或男性 17(89%)
    男_性别 13(68%)
    男性_性别 17(89%)
  人类物种 12(63%)
  蓝色或浅色 8 (42%)
    蓝眼睛 6 (32%)
    浅色皮肤 4 (21%)

我可以通过一些上游数据操作和手动编辑常规降价表来创建上面的表。但是,我想知道在 gtsummary 中实施的这种分组策略是否有某种解决方案。 如果我应该坚持预处理数据,好吧,那么如何创建分层缩进?

重现所需表格的代码(没有缩进):

data |> 
    mutate(male_or_masculine = if_any(c(male_sex, masculine_gender)),
           .before = male_sex) |> 
    mutate(blue_or_light = if_any(c(blue_eyes, light_skin)),
           .before = blue_eyes) |> 
    mutate(anything_at_all = if_any(male_sex:light_skin),
           .before = everything()) |> 
    tbl_summary()
r gtsummary
1个回答
0
投票

我认为该功能

bstfun::add_variable_grouping()
可以满足您的需要。

https://mskcc-epi-bio.github.io/bstfun/reference/add_variable_grouping.html

set.seed(11234)
add_variable_grouping_ex1 <-
  data.frame(
    race_asian = sample(c(TRUE, FALSE), 20, replace = TRUE),
    race_black = sample(c(TRUE, FALSE), 20, replace = TRUE),
    race_white = sample(c(TRUE, FALSE), 20, replace = TRUE),
    age = rnorm(20, mean = 50, sd = 10)
  ) %>%
  gtsummary::tbl_summary(
    label = list(race_asian = "Asian",
                 race_black = "Black",
                 race_white = "White",
                 age = "Age")
  ) %>%
  add_variable_grouping(
    "Race (check all that apply)" = c("race_asian", "race_black", "race_white")
  )

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.