Gostaria de definir manualmente grupos para variáveis dentro da chamada para tbl_summary. Um grupo de variáveis deve ser relatado tanto individualmente como em grupo. Se eu tivesse uma variável lógica apple
e uma variável lógica banana
, gostaria de relatar as frequências de apple
e banana
, mas também de fruits
.
Veja abaixo um exemplo com dados adaptados de dplyr::starwars. Para facilitar a postagem, incluí tabelas de markdown simples neste exemplo (não as tabelas renderizadas tbl_summary reais), mas acredito que elas explicam meu problema muito bem.
Dados de exemplo
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
Saída Vanilla tbl_summary() com dados brutos
tbl_summary(data)
Característica | N = 191 |
---|---|
sexo_masculino | 13 (68%) |
género masculino | 17 (89%) |
Espécie humana | 12 (63%) |
olhos azuis | 6 (32%) |
pele clara | 4 (21%) |
Esta é a aparência da tabela final (observe o recuo/deslocamento hierárquico):
Característica | N = 191 |
---|---|
nada mesmo | 19 (100%) |
masculino_ou_masculino | 17 (89%) |
sexo_masculino | 13 (68%) |
género masculino | 17 (89%) |
Espécie humana | 12 (63%) |
azul_ou_claro | 8 (42%) |
olhos azuis | 6 (32%) |
pele clara | 4 (21%) |
Eu poderia criar a tabela acima com alguma manipulação de dados upstream e edição manual de uma tabela de descontos regular. Porém, gostaria de saber se existe algum tipo de solução para tal estratégia de agrupamento implementada no gtsummary. Se eu continuar pré-processando os dados, ok, então como faço para criar o recuo hierárquico?
Código que reproduz a tabela desejada (sem recuo):
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()