6.1 Criando Tabelas
6.1.1 Função table
Para criar tabelas o R possui a função table(), incorporado ao seu próprio sistema.
Tabela simples
Por exemplo, vamos começar criando uma tabela que mostre a divisão da variável estado_civil2, por categoria. Utilizamos a função table(), indicando qual coluna queremos visualizar.
##
## solteira(o) casada(o) divorciada(o)/separada(o)
## 977 3241 168
## viúva(o)
## 67
Tabela de contingência
Podemos também criar uma tabela de contingência (também chamada de tabela cruzada), cruzando duas variáveis qualitativas. Mais uma vez, utilizamos a função table(), mas dessa vez, com duas variáveis.
##
## bom ruim
## solteira(o) 649 328
## casada(o) 2412 829
## divorciada(o)/separada(o) 90 78
## viúva(o) 48 19
Podemos também criar uma tabela cruzada com proporções, utilizando a função prop.table() externamente à função table().
##
## bom ruim
## solteira(o) 0.145744442 0.073658208
## casada(o) 0.541657310 0.186166629
## divorciada(o)/separada(o) 0.020211094 0.017516281
## viúva(o) 0.010779250 0.004266786
6.1.2 Tabelas com o tidyverse
Alguns pacotes do tidyverse como o dplyr, o tdyr e o janitor permitem criar tabelas de maneira eficiente.
Tabela de frequência
Como já vimos na Aula 2, o pacote dplyr permite contarmos quantos elementos temos em cada categoria de uma variável, ou seja, uma tabela de frequência!
#Tabela de frequência com o Summarize
dados %>%
group_by(estado_civil2) %>%
summarize(Frequência=n()) # Contar número de indivíduos em cada categorias
## # A tibble: 4 × 2
## estado_civil2 Frequência
## <fct> <int>
## 1 solteira(o) 977
## 2 casada(o) 3241
## 3 divorciada(o)/separada(o) 168
## 4 viúva(o) 67
Uma outra forma de criar a mesma tabela seria através da função count(), que permite contar quantos elementos temos em cada categoria.
dados %>%
count(estado_civil2, name = "Frequência") # Contar número de indivíduos em cada categorias
## estado_civil2 Frequência
## 1 solteira(o) 977
## 2 casada(o) 3241
## 3 divorciada(o)/separada(o) 168
## 4 viúva(o) 67
Para transformar em uma tabela de porcentagem, adicionamos o comando mutate(prop=n/sum(n)*100).
dados %>%
group_by(estado_civil2) %>%
summarize(n=n()) %>% # Contar número de indivíduos em cada categorias
mutate(prop=n/sum(n)*100) # Contar proporção
## # A tibble: 4 × 3
## estado_civil2 n prop
## <fct> <int> <dbl>
## 1 solteira(o) 977 21.9
## 2 casada(o) 3241 72.8
## 3 divorciada(o)/separada(o) 168 3.77
## 4 viúva(o) 67 1.50
Podemos, ainda, adicionar a idade média de cada grupo
dados %>%
group_by(estado_civil2) %>%
summarize(n=n(),idade=mean(idade))%>% #adicionar a idade média
mutate(prop=n/sum(n)*100)
## # A tibble: 4 × 4
## estado_civil2 n idade prop
## <fct> <int> <dbl> <dbl>
## 1 solteira(o) 977 27.8 21.9
## 2 casada(o) 3241 39.6 72.8
## 3 divorciada(o)/separada(o) 168 38.2 3.77
## 4 viúva(o) 67 48.8 1.50
Tabela de contingência
Para fazermos uma tabela de contingência, ou tabela cruzada, podemos utilizar os pacotes tidyr ou o pacote janitor.
Pacote tidyr
utilizamos três comandos principais:
-count: conta o número de ocorrências únicas de combinações das variáveis especificadas -spread: A função spread() do pacote tidyr é usada para converter dados de formato longo (long) para formato largo (wide). Especificamos a coluna status como chave (key), os valores da coluna n como valores a serem distribuídos nas novas colunas, e fill = 0 para preencher com zeros onde não houver dados.
#Chamar o tidyr
library(tidyr)
#Criar tabela de contingência de Estado Civil x Status
dados %>%
count(estado_civil2, status) %>%
spread(key = status, value = n, fill = 0)
Pacote janitor
Para fazer uma tabela de contingência podemos também utilizar a função tabyl() do pacote janitor. Em tabyl colocamos o nome das duas variáveis que queremos visualizar como tabela.
#Chamar o janitor
library(janitor)
#Criar tabela de contingência de Estado Civil x Status
dados %>%
tabyl(estado_civil, status)
## estado_civil bom ruim
## casada(o) 2412 829
## divorciada(o) 24 14
## separada(o) 66 64
## solteira(o) 649 328
## viúva(o) 48 19
A função adorn_percentages() adiciona as porcentagens e adorn_rounding arredonda os valores
#Criar tabela de contingência de Estado Civil x Status
dados %>%
tabyl(estado_civil, status)%>%
adorn_percentages()%>% #Chamar porcentagens
adorn_rounding(digits=2) #Arredondar para 2 dígitos
## 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
6.1.3 Tabelas com funções
No, funções são blocos de código que realizam uma tarefa específica. Criar e utilizar funções é essencial para a programação eficiente, pois permite a reutilização de código e a organização do trabalho de maneira modular. Aqui está um resumo sobre funções em R:
#Criar tabela de contingência de Estado Civil x Status
create_percentage_table <- function(row_var, col_var, data) {
table <- table(data[[row_var]], data[[col_var]])
prop_table <- round(prop.table(table, 1) * 100, 2)
return(as.data.frame.matrix(prop_table))
}
#Criar tabela de contingência de Estado Civil x Status
create_percentage_table("estado_civil", "status", dados)
## bom ruim
## casada(o) 74.42 25.58
## divorciada(o) 63.16 36.84
## separada(o) 50.77 49.23
## solteira(o) 66.43 33.57
## viúva(o) 71.64 28.36
Se quisermos criar tabelas de contingência com mais de uma variável na coluna, utilizamos o código abaixo
create_percentage_table_custom <- function(row_var, col_vars, data) {
# Create separate contingency tables for each column variable
table_var1 <- table(data[[row_var]], data[[col_vars[1]]])
table_var2 <- table(data[[row_var]], data[[col_vars[2]]])
# Convert to percentages by row
prop_table_var1<- round(prop.table(table_var1, 1) * 100, 2)
prop_table_var2 <- round(prop.table(table_var2, 1) * 100, 2)
# Convert both to data frames and merge them side by side
df_var1 <- as.data.frame.matrix(prop_table_var1)
df_var2 <- as.data.frame.matrix(prop_table_var2)
# Combine the tables, keeping row names (categories of TP_DEPENDENCIA_rec)
combined_table <- cbind(df_var1, df_var2)
return(combined_table)
}
#Criar tabela de contingência de Estado Civil x Status
create_percentage_table_custom("estado_civil",
c("status", "moradia"), dados)
## bom ruim alugada outras pais priv própria
## casada(o) 74.42 25.58 22.45 6.46 7.39 6.58 57.11
## divorciada(o) 63.16 36.84 40.54 5.41 18.92 2.70 32.43
## separada(o) 50.77 49.23 38.46 6.15 23.08 3.08 29.23
## solteira(o) 66.43 33.57 17.88 10.07 52.21 2.67 17.16
## viúva(o) 71.64 28.36 16.42 4.48 0.00 4.48 74.63