Eu tenho um quadro de dados (exemplo abaixo) que gostaria de colocar em uma tabela HTML usando o pacote kableExtra
em R. Uma das minhas colunas ( pos
) é uma variável de agrupamento e gostaria de usá-la para adicionar rótulos de linhas de grupo na mesa. Sei que posso fazer isso com a pack_rows()
função from kableExtra
, mas gostaria de saber se existe alguma forma de fazer isso de forma dinâmica. Por exemplo, tenho três valores de string exclusivos pos
no conjunto de dados de exemplo e poderia facilmente chamar três pack_rows()
funções e fornecer os respectivos índices (primeiro valor e a linha média). No entanto, nem sempre posso ter trêspos
strings (por exemplo, às vezes posso ter duas, quatro ou cinco), e o número de linhas/observações para cada grupo mudará em meu conjunto de dados real. Como gostaria de usar isso para gerar um relatório, espero que haja um truque para automatizar esse processo de alguma forma. Obrigado.
library(tidyverse)
library(kableExtra)
set.seed(10)
name <- paste("Name", LETTERS[1:15])
var1 <- rep(rnorm(15, 100, 20))
var2 <- rep(rnorm(15, 100, 20))
var3 <- rep(rnorm(15, 100, 20))
var4 <- rep(rnorm(15, 100, 20))
pos <- c(rep("DEF", 5), rep("MID", 5), rep("FWD", 5))
df <- data.frame(name, var1, var2, var3, var4, pos)
agg_df <- bind_rows(
df,
df %>% group_by(pos) %>%
summarise_at(vars(var1:var4), mean) %>%
mutate(name = "mean")
) %>%
arrange(pos, name)
agg_df %>%
kbl() %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
fixed_thead = TRUE)
Uma opção seria usar
Reduce
oupurrr::reduce
adicionar as linhas de cabeçalho viapack_rows()
. Para esse fim, primeiro crio uma lista contendo o grupostart
eend
as linhas, bem como o grupolabel
.