我想在 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()
我认为该功能
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")
)