我想在 tbl_summary 调用中手动设置变量组。一组变量应该单独报告,也可以作为一个组报告。如果我有一个逻辑变量apple
和一个逻辑变量banana
,我想报告apple
和的频率banana
,但也报告的频率fruits
。
请参阅下面的示例,其中的数据改编自 dplyr::starwars。为了方便发布,我在此示例中包含了普通的 markdown 表(而不是实际的 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
带有原始数据的 Vanilla tbl_summary() 输出
tbl_summary(data)
特征 | 数量 = 191 |
---|---|
男性性别 | 13(68%) |
男性性别 | 17(89%) |
人类物种 | 12(63%) |
蓝眼睛 | 6(32%) |
light_skin | 4(21%) |
最终的表格应该是这样的(注意层次缩进/偏移):
特征 | 数量 = 191 |
---|---|
任何事情 | 19(100%) |
男性或阳性 | 17(89%) |
男性性别 | 13(68%) |
男性性别 | 17(89%) |
人类物种 | 12(63%) |
蓝色或浅色 | 8(42%) |
蓝眼睛 | 6(32%) |
light_skin | 4(21%) |
我可以通过一些上游数据操作和常规 markdown 表的手动编辑来创建上面的表格。但是,我想知道 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
以问题中的例子来说: