```{r setup}
#| warning: false
#| message: false
library(palmerpenguins)
library(tidyverse)
library(tidyselect)
library(gt)
```
Pinguins no formato padrão
Vamos começar com esta tabela do número de pinguins por espécie, sexo, ano e ilha.
```{r}
#| warning: false
#| message: false
#| fig-cap: "Quantidade de pinguins por espécie e sexo"
#| label: palmer
penguins_gt <-
penguins %>%
count(island, year, species, sex) %>%
filter(!is.na(sex)) %>%
pivot_wider(names_from = c(species, sex),
values_from = n,
names_glue = "{species} ({sex})",
values_fill = 0) %>%
gt()
penguins_gt
```
island | year | Adelie (female) | Adelie (male) | Gentoo (female) | Gentoo (male) | Chinstrap (female) | Chinstrap (male) |
---|---|---|---|---|---|---|---|
Biscoe | 2007 | 5 | 5 | 16 | 17 | 0 | 0 |
Biscoe | 2008 | 9 | 9 | 22 | 23 | 0 | 0 |
Biscoe | 2009 | 8 | 8 | 20 | 21 | 0 | 0 |
Dream | 2007 | 9 | 10 | 0 | 0 | 13 | 13 |
Dream | 2008 | 8 | 8 | 0 | 0 | 9 | 9 |
Dream | 2009 | 10 | 10 | 0 | 0 | 12 | 12 |
Torgersen | 2007 | 8 | 7 | 0 | 0 | 0 | 0 |
Torgersen | 2008 | 8 | 8 | 0 | 0 | 0 | 0 |
Torgersen | 2009 | 8 | 8 | 0 | 0 | 0 | 0 |
Quantidade de pinguins por espécie e sexo
1. Retirar as linhas verticais
A formatação padrão do pacote gt() já elimina as linhas verticais, senão esta seria nossa primeira tarefa.
2. Alinhar os dados
Em tabelas o alinhamento deve considerar:
textos: alinhar à esquerda
números: alinhar à direita
```{r}
#| warning: false
#| message: false
#| fig-cap: "Quantidade de pinguins por espécie e sexo"
#| label: palmer2
penguins_gt <-
penguins_gt %>%
cols_align(align = "right",
columns = c(`Adelie (female)`, `Adelie (male)`,
`Gentoo (female)`, `Gentoo (male)`,
`Chinstrap (female)`, `Chinstrap (male)`))
penguins_gt
```
island | year | Adelie (female) | Adelie (male) | Gentoo (female) | Gentoo (male) | Chinstrap (female) | Chinstrap (male) |
---|---|---|---|---|---|---|---|
Biscoe | 2007 | 5 | 5 | 16 | 17 | 0 | 0 |
Biscoe | 2008 | 9 | 9 | 22 | 23 | 0 | 0 |
Biscoe | 2009 | 8 | 8 | 20 | 21 | 0 | 0 |
Dream | 2007 | 9 | 10 | 0 | 0 | 13 | 13 |
Dream | 2008 | 8 | 8 | 0 | 0 | 9 | 9 |
Dream | 2009 | 10 | 10 | 0 | 0 | 12 | 12 |
Torgersen | 2007 | 8 | 7 | 0 | 0 | 0 | 0 |
Torgersen | 2008 | 8 | 8 | 0 | 0 | 0 | 0 |
Torgersen | 2009 | 8 | 8 | 0 | 0 | 0 | 0 |
Quantidade de pinguins por espécie e sexo
3. Título para a tabela
Vamos acrescentar um título descrevendo as informações apresentadas.
```{r}
#| warning: false
#| message: false
#| fig-cap: "Quantidade de pinguins por espécie e sexo"
#| label: palmer3
penguins_gt <-
penguins_gt %>%
tab_header(title = "Pinguins no Arquipélago Palmer na Antártica",
subtitle = "palmerpinguins in R dataset") %>%
opt_align_table_header(align = "left")
penguins_gt
```
Pinguins no Arquipélago Palmer na Antártica | |||||||
---|---|---|---|---|---|---|---|
palmerpinguins in R dataset | |||||||
island | year | Adelie (female) | Adelie (male) | Gentoo (female) | Gentoo (male) | Chinstrap (female) | Chinstrap (male) |
Biscoe | 2007 | 5 | 5 | 16 | 17 | 0 | 0 |
Biscoe | 2008 | 9 | 9 | 22 | 23 | 0 | 0 |
Biscoe | 2009 | 8 | 8 | 20 | 21 | 0 | 0 |
Dream | 2007 | 9 | 10 | 0 | 0 | 13 | 13 |
Dream | 2008 | 8 | 8 | 0 | 0 | 9 | 9 |
Dream | 2009 | 10 | 10 | 0 | 0 | 12 | 12 |
Torgersen | 2007 | 8 | 7 | 0 | 0 | 0 | 0 |
Torgersen | 2008 | 8 | 8 | 0 | 0 | 0 | 0 |
Torgersen | 2009 | 8 | 8 | 0 | 0 | 0 | 0 |
Quantidade de pinguins por espécie e sexo
4. Melhorar os nomes das colunas
Nomes das colunas são importantes em tabelas. No nosso caso, a repetição do nome da espécie para diferentes sexos torna a leitura entediante. Vamos agrupar as colunas por espécie.
```{r}
#| warning: false
#| message: false
#| fig-cap: "Quantidade de pinguins por espécie e sexo"
#| label: palmer5
penguins_gt <-
penguins_gt %>%
cols_label(
`Adelie (female)` = "female",
`Adelie (male)` = "male",
`Gentoo (female)` = "female",
`Gentoo (male)` = "male",
`Chinstrap (female)` = "female",
`Chinstrap (male)` = "male"
) %>%
tab_spanner(
label = c("Adele"),
columns = c(`Adelie (female)`, `Adelie (male)`)
) %>%
tab_spanner(
label = c("Chinstrap"),
columns = c(`Chinstrap (female)`, `Chinstrap (male)`)
) %>%
tab_spanner(
label = c("Gentoo"),
columns = c(`Gentoo (female)`, `Gentoo (male)`)
) %>%
tab_style(style = cell_text(weight = "bold"),
location = cells_column_spanners())
penguins_gt
```
Pinguins no Arquipélago Palmer na Antártica | |||||||
---|---|---|---|---|---|---|---|
palmerpinguins in R dataset | |||||||
island | year | Adele | Gentoo | Chinstrap | |||
female | male | female | male | female | male | ||
Biscoe | 2007 | 5 | 5 | 16 | 17 | 0 | 0 |
Biscoe | 2008 | 9 | 9 | 22 | 23 | 0 | 0 |
Biscoe | 2009 | 8 | 8 | 20 | 21 | 0 | 0 |
Dream | 2007 | 9 | 10 | 0 | 0 | 13 | 13 |
Dream | 2008 | 8 | 8 | 0 | 0 | 9 | 9 |
Dream | 2009 | 10 | 10 | 0 | 0 | 12 | 12 |
Torgersen | 2007 | 8 | 7 | 0 | 0 | 0 | 0 |
Torgersen | 2008 | 8 | 8 | 0 | 0 | 0 | 0 |
Torgersen | 2009 | 8 | 8 | 0 | 0 | 0 | 0 |
Quantidade de pinguins por espécie e sexo
6. Agrupe colunas com dados que se repetem
A coluna island é muito repetitiva e ao invés dela, podemos agrupar os dados em linhas agrupadoras.
```{r}
#| warning: false
#| message: false
#| fig-cap: "Quantidade de pinguins por espécie e sexo"
#| label: palmer6
penguins_gt <-
penguins %>%
count(island, year, species, sex) %>%
mutate(island = str_c("Ilha: ", island)) %>%
filter(!is.na(sex)) %>%
pivot_wider(names_from = c(species, sex),
values_from = n,
names_glue = "{species} ({sex})",
values_fill = NA) %>%
gt(rowname_col = "year",
groupname_col = "island") %>%
tab_header(title = "Pinguins no Arquipélago Palmer na Antártica",
subtitle = "palmerpinguins in R dataset") %>%
opt_align_table_header(align = "left") %>%
cols_align(align = "right",
columns = c(`Adelie (female)`, `Adelie (male)`,
`Gentoo (female)`, `Gentoo (male)`,
`Chinstrap (female)`, `Chinstrap (male)`)) %>%
cols_label(
`Adelie (female)` = "female",
`Adelie (male)` = "male",
`Gentoo (female)` = "female",
`Gentoo (male)` = "male",
`Chinstrap (female)` = "female",
`Chinstrap (male)` = "male"
) %>%
tab_spanner(
label = c("Adele"),
columns = c(`Adelie (female)`, `Adelie (male)`)
) %>%
tab_spanner(
label = c("Gentoo"),
columns = c(`Gentoo (female)`, `Gentoo (male)`)
) %>%
tab_spanner(
label = c("Chinstrap"),
columns = c(`Chinstrap (female)`, `Chinstrap (male)`)
) %>%
tab_style(style = cell_text(weight = "bold"),
location = cells_column_spanners()) %>%
tab_style(style = cell_text(weight = "bold"),
location = cells_row_groups()) %>%
sub_missing(
columns = everything(),
missing_text = "-"
)
# An option for positioning the row_group label
# %>%
# tab_options(
# row_group.as_column = TRUE
# )
penguins_gt
```
Pinguins no Arquipélago Palmer na Antártica | ||||||
---|---|---|---|---|---|---|
palmerpinguins in R dataset | ||||||
Adele | Gentoo | Chinstrap | ||||
female | male | female | male | female | male | |
Ilha: Biscoe | ||||||
2007 | 5 | 5 | 16 | 17 | - | - |
2008 | 9 | 9 | 22 | 23 | - | - |
2009 | 8 | 8 | 20 | 21 | - | - |
Ilha: Dream | ||||||
2007 | 9 | 10 | - | - | 13 | 13 |
2008 | 8 | 8 | - | - | 9 | 9 |
2009 | 10 | 10 | - | - | 12 | 12 |
Ilha: Torgersen | ||||||
2007 | 8 | 7 | - | - | - | - |
2008 | 8 | 8 | - | - | - | - |
2009 | 8 | 8 | - | - | - | - |
Quantidade de pinguins por espécie e sexo
7. Acrescentando linhas de sumarização
Linhas de sumarização ajudam na leitura dos dados.
```{r}
#| warning: false
#| message: false
#| fig-cap: "Quantidade de pinguins por espécie e sexo"
#| label: palmer7
fns_labels <-
list(
# avg = ~mean(., na.rm = TRUE),
`Média` = ~mean(., na.rm = TRUE)
#,
# s.d. = ~sd(., na.rm = TRUE)
)
penguins_gt <-
penguins_gt %>%
summary_rows(
groups = TRUE,
columns = c(`Adelie (female)`, `Adelie (male)`,
`Gentoo (female)`, `Gentoo (male)`,
`Chinstrap (female)`, `Chinstrap (male)`),
fns = fns_labels,
formatter = fmt_number,
decimals = 0
)
penguins_gt
```
Pinguins no Arquipélago Palmer na Antártica | ||||||
---|---|---|---|---|---|---|
palmerpinguins in R dataset | ||||||
Adele | Gentoo | Chinstrap | ||||
female | male | female | male | female | male | |
Ilha: Biscoe | ||||||
2007 | 5 | 5 | 16 | 17 | - | - |
2008 | 9 | 9 | 22 | 23 | - | - |
2009 | 8 | 8 | 20 | 21 | - | - |
Ilha: Dream | ||||||
2007 | 9 | 10 | - | - | 13 | 13 |
2008 | 8 | 8 | - | - | 9 | 9 |
2009 | 10 | 10 | - | - | 12 | 12 |
Ilha: Torgersen | ||||||
2007 | 8 | 7 | - | - | - | - |
2008 | 8 | 8 | - | - | - | - |
2009 | 8 | 8 | - | - | - | - |
Quantidade de pinguins por espécie e sexo
8. Eliminar os valores com zero
Os zeros atrapalham a leitura. Vamos substituí-los por um hífen para facilitar a leitura.
```{r}
#| warning: false
#| message: false
#| fig-cap: "Quantidade de pinguins por espécie e sexo"
#| label: palmer8
penguins_gt <-
penguins_gt %>%
sub_zero(columns = c(`Adelie (female)`, `Adelie (male)`,
`Gentoo (female)`, `Gentoo (male)`,
`Chinstrap (female)`, `Chinstrap (male)`),
zero_text = "-")
penguins_gt
```
Pinguins no Arquipélago Palmer na Antártica | ||||||
---|---|---|---|---|---|---|
palmerpinguins in R dataset | ||||||
Adele | Gentoo | Chinstrap | ||||
female | male | female | male | female | male | |
Ilha: Biscoe | ||||||
2007 | 5 | 5 | 16 | 17 | - | - |
2008 | 9 | 9 | 22 | 23 | - | - |
2009 | 8 | 8 | 20 | 21 | - | - |
Ilha: Dream | ||||||
2007 | 9 | 10 | - | - | 13 | 13 |
2008 | 8 | 8 | - | - | 9 | 9 |
2009 | 10 | 10 | - | - | 12 | 12 |
Ilha: Torgersen | ||||||
2007 | 8 | 7 | - | - | - | - |
2008 | 8 | 8 | - | - | - | - |
2009 | 8 | 8 | - | - | - | - |
Quantidade de pinguins por espécie e sexo
9. Acrescentar uma linha de sumarização total no final
Para sabermos o total de pinguins em todas as ilhas, vamos acrescentar uma linha contendo uma
```{r}
#| warning: false
#| message: false
#| fig-cap: "Quantidade de pinguins por espécie e sexo"
#| label: palmer9
fns_grand_labels <-
list(
`Média Geral` = ~mean(., na.rm = TRUE)
)
penguins_gt <-
penguins_gt %>%
grand_summary_rows(
columns = c(`Adelie (female)`, `Adelie (male)`,
`Gentoo (female)`, `Gentoo (male)`,
`Chinstrap (female)`, `Chinstrap (male)`),
fns = fns_grand_labels,
formatter = fmt_number,
decimals = 0,
missing_text = "-"
) %>%
tab_style(style = cell_fill(color = "darkgray"),
location = cells_grand_summary())
penguins_gt
```
Pinguins no Arquipélago Palmer na Antártica | ||||||
---|---|---|---|---|---|---|
palmerpinguins in R dataset | ||||||
Adele | Gentoo | Chinstrap | ||||
female | male | female | male | female | male | |
Ilha: Biscoe | ||||||
2007 | 5 | 5 | 16 | 17 | - | - |
2008 | 9 | 9 | 22 | 23 | - | - |
2009 | 8 | 8 | 20 | 21 | - | - |
Ilha: Dream | ||||||
2007 | 9 | 10 | - | - | 13 | 13 |
2008 | 8 | 8 | - | - | 9 | 9 |
2009 | 10 | 10 | - | - | 12 | 12 |
Ilha: Torgersen | ||||||
2007 | 8 | 7 | - | - | - | - |
2008 | 8 | 8 | - | - | - | - |
2009 | 8 | 8 | - | - | - | - |
Média Geral | 8 | 8 | 19 | 20 | 11 | 11 |
Quantidade de pinguins por espécie e sexo
Citation
@misc{abreu2022,
author = {Abreu, Marcos},
title = {R Tip: Criando Tabelas Com o Pacote Gt},
date = {2022-11-05},
url = {https://abreums.github.io/posts/2022-11-05-r-tip-criando-tabelas-para-o-pacote-gt/},
langid = {en}
}