5.3 Tabelas para apresentação
Para a apresentação de tabelas personalizadas no R, há diversos pacotes que oferecem uma ampla gama de funcionalidades para formatação e customização.
• kableExtra
• gt
• flextable
• DT
Pacote GT
O pacote gt é um pacote relativamente novo que permite a apresentação de tabelas de maneira limpa e organizada.
Ele funciona através do tidyverse com os comandos pipe %>%, o que facilita sua aplicação.
Tabela de resumo
O pacote gtsummary permite criar uma tabela resumo de dados de forma organizada e bem apresentada.
Vamos criar uma tabela resumo para as variáveis estado_civil2, status e idade do nosso banco de dados. Utilizamos a função tbl_summary(), que nos retorna a frequência e proporção das categorias (variáveis categóricas) e a média e quartis (variáveis quantitativas).
Characteristic | N = 4,4531 |
---|---|
estado_civil2 | |
solteira(o) | 977 (22%) |
casada(o) | 3,241 (73%) |
divorciada(o)/separada(o) | 168 (3.8%) |
viúva(o) | 67 (1.5%) |
status | |
bom | 3,199 (72%) |
ruim | 1,254 (28%) |
idade | 36 (28, 45) |
1 n (%); Median (IQR) |
Modificando nomes das colunas
A função cols_label() permite modificar os nomes das colunas para tornar a tabela mais apresentável. Ela funciona da seguinte forma:
cols_label(variavel1=“Nome da 1a coluna”, variavel2=“Nome da 2a coluna”)
Vamos modificar o nome das colunas com nossa tabela de Estado Civil e idade média
#Modificar nome das colunas
dados %>%
group_by(estado_civil2) %>%
summarize(media=mean(idade, na.rm = F))%>%
arrange(estado_civil2)%>%
gt()%>%
cols_label(estado_civil2= "Estado Civil",
media="Idade média") #Modificar nomes das colunas
Estado Civil | Idade média |
---|---|
solteira(o) | 27.84033 |
casada(o) | 39.56618 |
divorciada(o)/separada(o) | 38.17857 |
viúva(o) | 48.82090 |
Título e Fonte
Agora vamos adicionar um título à nossa tabela utilizando o comando tab_header(title= Título) e uma fonte utilizando o comando tab_source_note()
#Adicionar título e fonte
dados %>%
group_by(estado_civil2) %>%
summarize(media=mean(idade, na.rm = F))%>%
arrange(estado_civil2)%>%
gt()%>%
cols_label(estado_civil2= "Estado Civil",
media="Idade média")%>% #Modificar nomes das colunas
tab_header(
title = "Média de idade por estado civil")%>% #Adicionar título
tab_source_note(source_note = "Fonte: Bases Curso-R") #Adicionar fonte
Média de idade por estado civil | |
Estado Civil | Idade média |
---|---|
solteira(o) | 27.84033 |
casada(o) | 39.56618 |
divorciada(o)/separada(o) | 38.17857 |
viúva(o) | 48.82090 |
Fonte: Bases Curso-R |
Centralizando valores
Para centralizar os valores utilizamos a função cols_align() do gt e comando align=, que nos permite escolher como queremos alinhar nossos valores (right, left,center, auto).
#Centralizar valores
dados %>%
group_by(estado_civil2) %>%
summarize(media=mean(idade, na.rm = F))%>%
arrange(estado_civil2)%>%
gt()%>%
cols_label(estado_civil2= "Estado Civil",
media="Idade média")%>% #Modificar nomes das colunas
tab_header(title = "Média de idade por estado civil")%>% #Adicionar título
tab_source_note(source_note = "Fonte: Bases Curso-R")%>% #Adicionar fonte
cols_align(align = c("center"))#Centralizar
Média de idade por estado civil | |
Estado Civil | Idade média |
---|---|
solteira(o) | 27.84033 |
casada(o) | 39.56618 |
divorciada(o)/separada(o) | 38.17857 |
viúva(o) | 48.82090 |
Fonte: Bases Curso-R |
Arredondando decimais
Para finalizar a apresentação da nossa tabela, vamos reduzir o número de casas decimais da variável Idade Média. Para isso, antes de chamar a função gt() vamos adicionar a seguinte função: mutate(across(where(is.numeric), ~ round(., 2))). A expressão aponta que os resultados que forem numéricos na tabela serão arredondados para apenas 2 casas decimais.
#Arredondar casas decimais
dados %>%
group_by(estado_civil2) %>%
summarize(media=mean(idade, na.rm = F))%>%
arrange(estado_civil2)%>%
mutate(across(where(is.numeric), ~ round(., 2)))%>% #Arredondar
gt()%>%
cols_label(estado_civil2= "Estado Civil",
media="Idade média")%>% #Modificar nomes das colunas
tab_header(title = "Média de idade por estado civil")%>% #Adicionar título
tab_source_note(source_note = "Fonte: Bases Curso-R")%>%#Adicionar fonte
cols_align(align = c("center"))#Centralizar
Média de idade por estado civil | |
Estado Civil | Idade média |
---|---|
solteira(o) | 27.84 |
casada(o) | 39.57 |
divorciada(o)/separada(o) | 38.18 |
viúva(o) | 48.82 |
Fonte: Bases Curso-R |
Sublinhar linha
Podemos aprimorar ainda mais o visual da nossa tabela com pacote gtExtras.
A função gt_highlight_rows() nos permite destacar uma ou mais linhas da tabela com diferentes cores. Para isso basta indicar qual linha queremos destacar. No caso, vamos destacar a segunda linha, correspondente aos indivíduos casados.
#Chamar o pacote gtExtras
library(gtExtras)
#Sublinhar linha
dados %>%
group_by(estado_civil2) %>%
summarize(media=mean(idade, na.rm = F))%>%
arrange(estado_civil2)%>%
mutate(across(where(is.numeric), ~ round(., 2)))%>%#Arredondar
gt()%>%
cols_label(estado_civil2= "Estado Civil",
media="Idade média")%>% #Modificar nomes das colunas
tab_header(title = "Média de idade por estado civil")%>% #Adicionar título
tab_source_note(source_note = "Fonte: Bases Curso-R")%>%#Adicionar fonte
cols_align(align = c("center"))%>%#Centralizar
gt_highlight_rows(rows = 2, fill = "lightblue")
Média de idade por estado civil | |
Estado Civil | Idade média |
---|---|
solteira(o) | 27.84 |
casada(o) | 39.57 |
divorciada(o)/separada(o) | 38.18 |
viúva(o) | 48.82 |
Fonte: Bases Curso-R |
Tabela de contingência
Para tabelas de contingência utilizamos a mesma lógica vista acima. Vamos adicionar a função gt() à tabela que criamo com o pacote janitor.
estado_civil | bom | ruim |
---|---|---|
casada(o) | 0.74 | 0.26 |
divorciada(o) | 0.63 | 0.37 |
separada(o) | 0.51 | 0.49 |
solteira(o) | 0.66 | 0.34 |
viúva(o) | 0.72 | 0.28 |
Tabelas temáticas
O pacote gt oferece a possibilidade de criação de tabelas com temas visuais pré-definidos.
Vamos ver alguns exemplos. Para isso, salvamos primeiramente nossa tabela como um novo objeto, chamado tabela.
#Salvar tabela como novo objeto
tabela <- dados %>%
group_by(estado_civil2) %>%
summarize(media=mean(idade, na.rm = F))%>%
arrange(estado_civil2)%>%
mutate(across(where(is.numeric), ~ round(., 2)))%>%#Arredondar
gt()%>%
cols_label(estado_civil2= "Estado Civil",
media="Idade média")%>% #Modificar nomes das colunas
tab_header(title = "Média de idade por estado civil")%>% #Adicionar título
tab_source_note(source_note = "Fonte: Bases Curso-R")%>%#Adicionar fonte
cols_align(align = c("center"))%>%#Centralizar
gt_highlight_rows(rows = 2, fill = "lightblue")
Em seguida podemos aplicar o tema gt_theme_nytimes(), que simula as tabelas publicadas no jornal New York Times:
Média de idade por estado civil | |
Estado Civil | Idade média |
---|---|
solteira(o) | 27.84 |
casada(o) | 39.57 |
divorciada(o)/separada(o) | 38.18 |
viúva(o) | 48.82 |
Fonte: Bases Curso-R |
Outros temas podem ser aplicados às tabelas com o pacote base do gt:
gt_theme_guardian()
gt_theme_pff()
gt_theme_dot_matrix()
gt_theme_dark()
gt_theme_excel()
gt_theme_538()
gt_theme_espn
Mais comandos do gt podem ser encontrados no Glossário.