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.

library(gt)
library(gtsummary)
library(janitor)

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).

dados %>% 
  select(estado_civil2,status,idade) %>% #Selecionar colunas
  tbl_summary()
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.

dados %>% 
  tabyl(estado_civil, status)%>%
  adorn_percentages()%>%
  adorn_rounding(digits=2)%>%
  gt()
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:

#Aplicar tema NY Times

gt_theme_nytimes(tabela)
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.