1 Resumo do conteúdo

  1. Breve introdução aos objetos mais utilzados no R
  2. Breve introdução as operações aritméticas básicas no R
  3. Comandos básicos para accessas colunas e linhas nos bancos de dados (com R base)
  4. Algumas funçoes do pacote dplyr (rename(), filter(), select(), e mutate())
  5. Criação de tableas com o R base
  6. Algumas funções do pacote janitor (clean_names(), get_duples(), remove_empty()e criação de tabelas com tabyl())
  7. Algumas funções do pacote gt para aperfumar as tabelas criadas no janitor
  8. Visualização de dados com o R base e o pacote ggplot2

2 Dicas:

Quando a gente vai trabalhar pela primeira vez com um novo pacote, o primeiro é fazer a instalação do pocote com o comando install.pachages(“NOME DO PACOTE”). SEMPRE chamar os pacotes que vamos utilizar com o comando library(NOME DO PACOTE). Utilizar o # pra fazer anotações ou comentarios. Sempre fazer comentarios para dar contexto ao trabalho e não esquecer detales (em futuras visitas ao seu script). Quando carregamos um banco de dados salvo em nosso computador, temos que colocar o caminho exato do diretorio onde fica salvo o banco de dados. Uma alternativa é utilizar a aba “Import Dataset”, localizada na janela chamada “Environment”. Ao clickar nela, lembrar de clickar na opção correspondente para o tipo de dados (o formato do seus dados que pode ser, por exemplo, csv, excell, etc.). Para o formato de dados csv a opção é “From text (readr)”. Ao accessar a opção desejada, o R vai gerar uma nova janela onde vocês podem selecionar nos seus diretorios o arquivo específico onde seu banco de dados foi salvo. Ao selecionar o arquivo desejado, na parte de embaixo a direita, o R fornece o código necessario pra fazer a importação dos dados (“Code Preview”). Quando uma linha ou um bloco de código não rodar, tente não bater no computador, dê uma respirada, contar até 10, beba uma cerveja (se desear), e ler a menssagem fornecido pelo R e tentar resolver o problema. Pode copiar e colar a menssagem di erro no ChatGpt (ou na ferramenta de inteligência artificial da sua preferenza) ou no google e recebir orientações (pode-me procurar também, eu demorarei mais em responder do que as outras opções, mas responderei). Agora sim!, a difrutar e curtir no R galera, boa viagem!

O que é o R?:

Uma linguagem estatística e de programação. Código aberto e amplamente utilizado em ciência de dados. Suportado por uma grande comunidade.

O que é o RStudio?:

Interface gráfica para facilitar o uso do R. Organização de scripts, ambiente e visualizações.

Tipos de Objetos Básicos mais Utilizados:

  1. Vetores: estrutura de dados que armazena um conjunto de valores do mesmo tipo, como números, caracteres, lógicos, expressões aritméticas, entre outros.
  2. Listas: é uma estrutura de dados que pode armazenar vários tipos de objetos, como números, caracteres, vetores, matrizes, dataframes e sub-listas.
  3. Matrizes: estrutura de dados que organiza elementos do mesmo tipo em linhas e colunas.
  4. Data Frames: estrutura de dados que organiza dados em linhas e colunas, similar a uma planilha.
#Criação de objetos básicos (esses objetos ficam salvos no Environment)

#Vetores
vector <- c(1, 2, 3, 4)
#Listas
lista <- list(1, "a", TRUE, 3.5)
#Matrizes
matriz <- matrix(1:9, nrow = 3)
#Data Frames
marco_dados <- data.frame(nome = c("Ana", "Bruno"), idade = c(25, 30))
# Chamar os objetos criados (escrever o nome e correr (Run) o comando)
vector
## [1] 1 2 3 4
lista
## [[1]]
## [1] 1
## 
## [[2]]
## [1] "a"
## 
## [[3]]
## [1] TRUE
## 
## [[4]]
## [1] 3.5
matriz
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
marco_dados
##    nome idade
## 1   Ana    25
## 2 Bruno    30
# Operações básicas (O R permite fazer operações algebráicas)
x <- 10 # Criamos um objeto chamado X e conferimos a ele o valor 10
y <- 5  # Criamos um objeto chamado Y e conferimos a ele o valor 5
soma <- x + y  # Adição X mais Y
produto <- x * y  # Multiplicação de X veces Y
divisao <- x / y  # Divisão X entre Y
expoente <- x^y  # Exponenciação de X a Y potencia
# Resultados das operações (chamamos os objetos criados assima)

soma
## [1] 15
produto
## [1] 50
divisao
## [1] 2
expoente
## [1] 1e+05
# Criando e Acessando Objetos no R base

meu_vetor <- c(10, 20, 30, 40) # Criamos o objeto chamado meu_vetor
meu_vetor[2]  # Acessamos o segundo elemento do nosso objeto meu_vetor (o número 2 se refere a posição 2)
## [1] 20
meu_vetor[4]  # Acessamos o quarto elemento do nosso objeto meu_vetor (o número 4 se refere a posição 4)
## [1] 40
meu_df <- data.frame(a = c(1, 2, 3), b = c("A", "B", "C")) # Criamos data frame meu_df
meu_df$a  # Acessa a coluna 'a' do nosso objeto chamado meu_df
## [1] 1 2 3
meu_df$b  # Acessa a coluna 'b' do nosso objeto chamado meu_df
## [1] "A" "B" "C"

3 O pacote dplyr:

Manipulação de dados eficiente: Oferece funções fáceis e rápidas para filtrar, agrupar, ordenar, resumir e modificar dados em data frames e tibble.

Sintaxe intuitiva: O dplyr utiliza uma sintaxe simples e legível com o uso do operador %>% (pipe), permitindo encadear várias operações em um fluxo claro e conciso.

Funções principais: Algumas das funções mais populares incluem:

  1. filter() para selecionar linhas específicas.
  2. select() para escolher colunas.
  3. mutate() para criar novas colunas.
  4. summarize() para calcular estatísticas resumidas.
  5. arrange() para ordenar os dados.
  6. rename() para renomear colunas.
# install.packages("dplyr") # Instalamos o pocote "dplyr" com o comando install.packages()
library(dplyr) # Chamamos o pacote dplyr para poder utilizar as suas funções

## Importação de Dados para manipulaçâo com o pacote dplyr

# install.packages("readr") # Instalamos o pacote readr pra poder importar dados no formato csv
library(readr) # Chamamos o pacote readr pra poder utilizar as suas funções
dados <- read_csv("vccin_sfty_dag.csv") # Importamos os dados (utilizar o caminho do seu computador / o diretorio onde ficou salvo o banco de dados no seu computador)
head(dados) # Chamamos as primeiras 6 linhas de nosso banco de dados
## # A tibble: 6 × 5
##   country     `2015` `2016` `2017` `2018`
##   <chr>        <dbl> <lgl>  <lgl>   <dbl>
## 1 Afghanistan    8.5 NA     NA        4.5
## 2 Albania       NA   NA     NA       15.8
## 3 UAE           NA   NA     NA        4.4
## 4 Argentina      1.2 NA     NA        4.8
## 5 Armenia       21.6 NA     NA       20.6
## 6 Australia      5.4 NA     NA        6.9
dim(dados) # Comando pra observar o número de filas (neste caso 146) e colunas (neste caso 5)
## [1] 146   5
# Renomear colunas com a função rename()

# Criamos um novo banco de dados chamado dados_ren, chamamos o banco original (chamado dados),
# usamos o conetor (pipe) %>% para ligar o banco de dados original com a função rename(). A
# gramática desse função pede colocar primrio o novo nome da coluna seguido do simbolo igual (=) 
# e depois o nome velio da coluna. 

names(dados)
## [1] "country" "2015"    "2016"    "2017"    "2018"
dados_ren <- dados %>%
  rename(
    pais = country,     # Renomeia 'country' para 'pais'
    ano_2015 = "2015",   # Renomeia 'X2015' para 'year_2015'
    ano_2016 = "2016",   # Renomeia 'X2016' para 'year_2016'
    ano_2017 = "2017",   # Renomeia 'X2017' para 'year_2017'
    ano_2018 = "2018"    # Renomeia 'X2018' para 'year_2018'
  )

# Verifique as novas colunas
head(dados_ren)
## # A tibble: 6 × 5
##   pais        ano_2015 ano_2016 ano_2017 ano_2018
##   <chr>          <dbl> <lgl>    <lgl>       <dbl>
## 1 Afghanistan      8.5 NA       NA            4.5
## 2 Albania         NA   NA       NA           15.8
## 3 UAE             NA   NA       NA            4.4
## 4 Argentina        1.2 NA       NA            4.8
## 5 Armenia         21.6 NA       NA           20.6
## 6 Australia        5.4 NA       NA            6.9
# Filtrar dados com base nas linhas com a função filter()

# Criamos um novo banco de dados chamado dados_filtrados, chamamos o banco original (chamado dados),
# usamos o conetor (pipe) %>% para ligar o banco de dados original com a função filter(). A
# gramática desse função pede colocar primrio o nome da coluna de interesse, e indicar uma 
# condição a seguir para filtrar os dados de interesse.

dados_filtrados <- dados_ren %>%
  filter(ano_2018 > 10) # Filtrar dados da coluna X2018 com valor maior que 10

dim(dados_filtrados) # Comando pra observar o número de filas (agora 53) e colunas (5)
## [1] 53  5
head(dados_filtrados)
## # A tibble: 6 × 5
##   pais       ano_2015 ano_2016 ano_2017 ano_2018
##   <chr>         <dbl> <lgl>    <lgl>       <dbl>
## 1 Albania        NA   NA       NA           15.8
## 2 Armenia        21.6 NA       NA           20.6
## 3 Austria        14.6 NA       NA           21.1
## 4 Azerbaijan     13.7 NA       NA           11.2
## 5 Belgium        14   NA       NA           20.6
## 6 Benin          NA   NA       NA           14
dados_filtrados_2 <- dados_ren %>%
  filter(ano_2018 > 10 & ano_2018 < 20) # Filtrar dados da coluna X2018 com valor maior que 10 e (&) menor do que 20

dim(dados_filtrados_2) # Comando pra observar o número de filas (agora 42) e colunas (5)
## [1] 42  5
head(dados_filtrados_2)
## # A tibble: 6 × 5
##   pais       ano_2015 ano_2016 ano_2017 ano_2018
##   <chr>         <dbl> <lgl>    <lgl>       <dbl>
## 1 Albania        NA   NA       NA           15.8
## 2 Azerbaijan     13.7 NA       NA           11.2
## 3 Benin          NA   NA       NA           14  
## 4 Bulgaria       12.1 NA       NA           15.6
## 5 Belarus        NA   NA       NA           14.8
## 6 Bolivia        NA   NA       NA           13.1
dados_filtrados_3 <- dados_ren %>%
  filter(ano_2015 == 14 | ano_2018 == 14) # Filtrar dados da coluna X2015 com valor igual que 14 ou (|) dados na coluna ano_2018 (também) igual do que 14

dim(dados_filtrados_3) # Comando pra observar o número de filas (agora 2) e colunas (5)
## [1] 2 5
head(dados_filtrados_3)
## # A tibble: 2 × 5
##   pais    ano_2015 ano_2016 ano_2017 ano_2018
##   <chr>      <dbl> <lgl>    <lgl>       <dbl>
## 1 Belgium       14 NA       NA           20.6
## 2 Benin         NA NA       NA           14
dados_filtrados_4 <- dados_ren %>%
  filter(ano_2015 == ano_2018) # Filtrar dados iguais tanto na coluna ano_2015 como na coluna ano_2018

dim(dados_filtrados_4) # Comando pra observar o número de filas (agora 1) e colunas (5)
## [1] 1 5
head(dados_filtrados_4)
## # A tibble: 1 × 5
##   pais  ano_2015 ano_2016 ano_2017 ano_2018
##   <chr>    <dbl> <lgl>    <lgl>       <dbl>
## 1 UK         8.7 NA       NA            8.7
# Os seguentes comandos permitem apagar objetos específicos:
remove(dados_filtrados)
rm(dados_filtrados_2)
remove(dados_filtrados_3)
rm(dados_filtrados_4)
# Selecionar colunas específicas

# Criamos um novo banco de dados chamado dados_selecionados, chamamos o banco original 
# (chamado dados), usamos o conetor (pipe) %>% para ligar o banco de dados original com 
# a função select(). A gramática desse função pede colocar o nome de cada coluna a ser
# selecionada

dados_selecionados <- dados_ren %>%
  select(pais, ano_2015, ano_2018) # Selecionando colunas específicas pelo nome delas

head(dados_selecionados)
## # A tibble: 6 × 3
##   pais        ano_2015 ano_2018
##   <chr>          <dbl>    <dbl>
## 1 Afghanistan      8.5      4.5
## 2 Albania         NA       15.8
## 3 UAE             NA        4.4
## 4 Argentina        1.2      4.8
## 5 Armenia         21.6     20.6
## 6 Australia        5.4      6.9
# Criar novas variáveis

# Criamos um novo banco de dados chamado dados_mutados, chamamos o banco original 
# (chamado dados_selecionados), usamos o conetor (pipe) %>% para ligar o banco de dados original 
# com a função mutate(). A gramática desse função pede colocar o nome de nova coluna (ou variável)
# que deseja criar, depois escreve a condição pra criar essa variável.

dados_mutados <- dados_selecionados %>%
  mutate(differ = ano_2018 - ano_2015) # Criando novas variáveis chamada "differ", com base na diferença entre os valores da coluna ano_2018 e ano_2015

head(dados_mutados, 10)
## # A tibble: 10 × 4
##    pais        ano_2015 ano_2018 differ
##    <chr>          <dbl>    <dbl>  <dbl>
##  1 Afghanistan      8.5      4.5   -4  
##  2 Albania         NA       15.8   NA  
##  3 UAE             NA        4.4   NA  
##  4 Argentina        1.2      4.8    3.6
##  5 Armenia         21.6     20.6   -1  
##  6 Australia        5.4      6.9    1.5
##  7 Austria         14.6     21.1    6.5
##  8 Azerbaijan      13.7     11.2   -2.5
##  9 Burundi         NA        6.5   NA  
## 10 Belgium         14       20.6    6.6
# Criando novas variáveis um pouco mais complexas

# Vamos criar uma nova variável com as pocentagems da diferença encontrada na nova variável differ com respeito aos valores da coluna ano_2015
dados_mutados <- dados_mutados %>% 
  mutate(differ_per = differ / ano_2015 * 100) %>% # Calculamos a porcentagem da diferença encontrada entre os valores a coluna ano_2015 e ano_2018, e arredondamos para 2 decimais (com a função round())
  mutate(differ_per = round(differ_per, 2)) # Arredondamos para 2 decimais

head(dados_mutados, 10)
## # A tibble: 10 × 5
##    pais        ano_2015 ano_2018 differ differ_per
##    <chr>          <dbl>    <dbl>  <dbl>      <dbl>
##  1 Afghanistan      8.5      4.5   -4       -47.1 
##  2 Albania         NA       15.8   NA        NA   
##  3 UAE             NA        4.4   NA        NA   
##  4 Argentina        1.2      4.8    3.6     300   
##  5 Armenia         21.6     20.6   -1        -4.63
##  6 Australia        5.4      6.9    1.5      27.8 
##  7 Austria         14.6     21.1    6.5      44.5 
##  8 Azerbaijan      13.7     11.2   -2.5     -18.2 
##  9 Burundi         NA        6.5   NA        NA   
## 10 Belgium         14       20.6    6.6      47.1
# Vamnos criar duas novas variáveis categóricas com base nos valores das variáveis ano_2015 e ano_2018
dados_mutados <- dados_mutados %>%
  mutate(X2015_cat = case_when(ano_2015 < 10 ~ "< 10",
                               ano_2015 > 9 & ano_2015 < 20 ~ "10 - 20",
                               ano_2015 > 19 ~ "20 ou mais")) %>% # Criando variável con categorías
  mutate(X2018_cat = case_when(ano_2018 < 10 ~ "< 10",
                               ano_2018 > 9 & ano_2018 < 20 ~ "10 - 20",
                               ano_2018 > 19 ~ "20 ou mais")) # Criando variável con categorías

head(dados_mutados, 10)
## # A tibble: 10 × 7
##    pais        ano_2015 ano_2018 differ differ_per X2015_cat  X2018_cat 
##    <chr>          <dbl>    <dbl>  <dbl>      <dbl> <chr>      <chr>     
##  1 Afghanistan      8.5      4.5   -4       -47.1  < 10       < 10      
##  2 Albania         NA       15.8   NA        NA    <NA>       10 - 20   
##  3 UAE             NA        4.4   NA        NA    <NA>       < 10      
##  4 Argentina        1.2      4.8    3.6     300    < 10       < 10      
##  5 Armenia         21.6     20.6   -1        -4.63 20 ou mais 20 ou mais
##  6 Australia        5.4      6.9    1.5      27.8  < 10       < 10      
##  7 Austria         14.6     21.1    6.5      44.5  10 - 20    20 ou mais
##  8 Azerbaijan      13.7     11.2   -2.5     -18.2  10 - 20    10 - 20   
##  9 Burundi         NA        6.5   NA        NA    <NA>       < 10      
## 10 Belgium         14       20.6    6.6      47.1  10 - 20    20 ou mais

4 Geração de Tabelas: R base

Tabelas Simples com summary() e table()

# install.packages("car")
library(car)
data(Chile)

# Verificando o tipo de variável

class(Chile$region) # factor, objeto que representa numericamente variáveis categóricas.
## [1] "factor"
class(Chile$education)
## [1] "factor"
class(Chile$sex)
## [1] "factor"
class(Chile$age) # integer, são números inteiros, ou seja, números sem parte decimal.
## [1] "integer"
class(Chile$statusquo) # numeric, são números reais, que podem ou não ter uma parte decimal. 
## [1] "numeric"
# Verifico quais são as categorias das variáveis categóricas
levels(Chile$region) # Essa variável tem cinco categorías.
## [1] "C"  "M"  "N"  "S"  "SA"
levels(Chile$sex) # Essa variável tem duas categorías.
## [1] "F" "M"
# Tabela de frequência absolutas no R base
table(Chile$region)
## 
##   C   M   N   S  SA 
## 600 100 322 718 960
table(Chile$sex)
## 
##    F    M 
## 1379 1321
# Proporcao da tabela (frequência relativa)
prop.table(table(Chile$region)) # Função prop.table calcula a proporção das frequencias
## 
##          C          M          N          S         SA 
## 0.22222222 0.03703704 0.11925926 0.26592593 0.35555556
# Expresso em 100%
prop.table(table(Chile$region)) * 100 # Se multiplica para expessar em 100%
## 
##         C         M         N         S        SA 
## 22.222222  3.703704 11.925926 26.592593 35.555556
# Arredondando
round(prop.table(table(Chile$region)) * 100, 2) # Se arredonda pra não ter muitos decimais
## 
##     C     M     N     S    SA 
## 22.22  3.70 11.93 26.59 35.56
# Tabelas de Contingência (cruzamento de duas variáveis categóricas)

table(Chile$region, Chile$sex) # Com frequências absolutas
##     
##        F   M
##   C  300 300
##   M   51  49
##   N  168 154
##   S  362 356
##   SA 498 462
tabela_cont <- table(Chile$region, Chile$sex) # Criando um objeto (com o nome tabela)

tabela_cont
##     
##        F   M
##   C  300 300
##   M   51  49
##   N  168 154
##   S  362 356
##   SA 498 462
# Frequencias relativas na linha expresso em 100% e arredondando a dois decimais
round(prop.table(tabela_cont, 1) * 100, 2) # Número 1 depois da tabela_count significa linha
##     
##          F     M
##   C  50.00 50.00
##   M  51.00 49.00
##   N  52.17 47.83
##   S  50.42 49.58
##   SA 51.88 48.12
tabela_cont
##     
##        F   M
##   C  300 300
##   M   51  49
##   N  168 154
##   S  362 356
##   SA 498 462
# Frequencias relativas na coluna expresso em 100% e arredondando a dois decimais
round(prop.table(tabela_cont, 2) * 100, 2) # Número 2 depois da tabela_count significa coluna
##     
##          F     M
##   C  21.75 22.71
##   M   3.70  3.71
##   N  12.18 11.66
##   S  26.25 26.95
##   SA 36.11 34.97

5 Geração de Tabelas: pacote janitor

O janitor é um pacote do R que facilita a limpeza e organização de dados.

Limpar nomes de colunas: clean_names() → Padroniza nomes de colunas para letras minúsculas e sem espaços. Detectar e remover duplicatas: get_dupes() → Identifica valores duplicados.

Tabulações rápidas: tabyl() → Cria tabelas de frequência organizadas. Gerenciar valores ausentes: remove_empty() → Remove linhas/colunas vazias.

Ideal para pré-processamento de dados.

# O pacote `janitor`

# install.packages("janitor") # Instalamos o pacote
library(janitor) # Chamamos o pacote

# Criar um data frame (com a função data.frame()) com nomes de colunas "sujos" (embarulados)
df <- data.frame("Nome completo" = c("Ana", "João", "Pedro"), # Primeiro colocamos o nome da coluna em aspas, seguido do conteudo (cuando o conteudo é categórico também colocamos aspas)
                 "Idade  anos" = c(25, 30, 28), # Cuando o conteudo da coluna é nimérico não precia aspas
                 "E-MAIL-PERS" = c("ana@email.com", "joao@email.com", "pedro@email.com"))
df
##   Nome.completo Idade..anos     E.MAIL.PERS
## 1           Ana          25   ana@email.com
## 2          João          30  joao@email.com
## 3         Pedro          28 pedro@email.com
# Limpar os nomes das colunas
df_limpo <- clean_names(df)

# Ver resultado
print(df_limpo)
##   nome_completo idade_anos     e_mail_pers
## 1           Ana         25   ana@email.com
## 2          João         30  joao@email.com
## 3         Pedro         28 pedro@email.com
# Criar um data frame com duplicatas
df <- data.frame(nome = c("Ana", "João", "Ana", "Maria", "Ana"),
                 idade = c(25, 30, 25, 40, 25))
df
##    nome idade
## 1   Ana    25
## 2  João    30
## 3   Ana    25
## 4 Maria    40
## 5   Ana    25
# Encontrar duplicatas na coluna "nome"
df_dupes <- get_dupes(df, nome)

# Ver resultado
print(df_dupes)
##   nome dupe_count idade
## 1  Ana          3    25
## 2  Ana          3    25
## 3  Ana          3    25
remove(df_dupes) # Apagar objeto df_dupes

# Criar um data frame com colunas e linhas vazias
df <- data.frame(nome = c("Ana", "João", NA),
                 idade = c(25, 30, NA),
                 cidade = c(NA, NA, NA))  # Coluna vazia
df
##   nome idade cidade
## 1  Ana    25     NA
## 2 João    30     NA
## 3 <NA>    NA     NA
# Remover apenas colunas vazias
df_sem_colunas_vazias <- remove_empty(df, which = "cols")
df_sem_colunas_vazias
##   nome idade
## 1  Ana    25
## 2 João    30
## 3 <NA>    NA
rm(df_sem_colunas_vazias) # Apagar objeto df_sem_colunas_vazias

# Remover apenas linhas vazias
df_sem_linhas_vazias <- remove_empty(df, which = "rows")
df_sem_linhas_vazias
##   nome idade cidade
## 1  Ana    25     NA
## 2 João    30     NA
remove(df_sem_linhas_vazias) # Apagar objeto df_sem_linhas_vazias

# Remover ambas (linhas e colunas)
df_limpo <- remove_empty(df, which = c("rows", "cols"))

# Ver resultado final
print(df_limpo)
##   nome idade
## 1  Ana    25
## 2 João    30
remove(df_limpo) # Apagar objeto df_limpo
#Tabela mais limpa com a função tabyl() do pacote janitor

# Criando uma tabela mais limpa com o janitor
Chile %>% # O banco de dados com as variáveis de interesse (neste caso o banco Chile)
  tabyl(region) %>% # Entre paréntese colocar a variável de interesse
  adorn_totals() %>% # Indicar que o R totalice os valores
  adorn_pct_formatting() # Apresentar as frequências relativas como porcentagens
##  region    n percent
##       C  600   22.2%
##       M  100    3.7%
##       N  322   11.9%
##       S  718   26.6%
##      SA  960   35.6%
##   Total 2700  100.0%
# Tabela de contngência (com porcentagem na linha)
Chile %>% # O banco de dados com as variáveis de interesse (neste caso o banco Chile)
  tabyl(region, sex) %>% # Entre paréntese colocar a variável de interesse
  adorn_totals("col") %>% #Indicar coluna o fila para totalizar os valores
  adorn_percentages("row") %>% # Apresentar como porcentagens na coluna o na fila (a sua escolia)
  adorn_pct_formatting(digits = 2) %>% # A formatação das porcentagems (0, 1, 2, etc. decimais)
  adorn_ns("front") %>% # Addicionar a n (frequencia absoluta) antes ("front") ou depois ("rear") da porcentagem
  adorn_title(row_name = "Região", col_name = "Sexo") # Renomear a fila e a coluna
##                 Sexo                           
##  Região            F            M         Total
##       C 300 (50.00%) 300 (50.00%) 600 (100.00%)
##       M  51 (51.00%)  49 (49.00%) 100 (100.00%)
##       N 168 (52.17%) 154 (47.83%) 322 (100.00%)
##       S 362 (50.42%) 356 (49.58%) 718 (100.00%)
##      SA 498 (51.88%) 462 (48.12%) 960 (100.00%)
# Tabela de contngência (com porcentagem na coluna)
Chile %>% # O banco de dados com as variáveis de interesse (neste caso o banco Chile)
  tabyl(region, sex) %>% # Entre paréntese colocar a variável de interesse
  adorn_totals("row") %>% #Indicar coluna o fila para totalizar os valores
  adorn_percentages("col") %>% # Apresentar como porcentagens na coluna o na fila (a sua escolia)
  adorn_pct_formatting(digits = 1) %>% # A formatação das porcentagems (0, 1, 2, etc. decimais)
  adorn_ns("rear") %>% # Addicionar a n (frequencia absoluta) antes ("front") ou depois ("rear") da porcentagem
  adorn_title(row_name = "Região", col_name = "Sexo") # Renomear a fila e a coluna
##                   Sexo               
##  Região              F              M
##       C  21.8%   (300)  22.7%   (300)
##       M   3.7%    (51)   3.7%    (49)
##       N  12.2%   (168)  11.7%   (154)
##       S  26.3%   (362)  26.9%   (356)
##      SA  36.1%   (498)  35.0%   (462)
##   Total 100.0% (1,379) 100.0% (1,321)

6 Geração de Tabelas: pacote gt

# Instalar e chamar o pacote gt

# install.packages("gt")
library(gt)

# Criamos uma tabela com a função tabyl() do pacote janitor

# Primeiro passo (criar a tabela_1):
tabela_1 <- Chile %>% # O banco de dados com as variáveis de interesse
  tabyl(region) %>% # Entre paréntese coloca a variável de interesse
  adorn_totals() %>% 
  adorn_pct_formatting()

# Segundo passo (aperfumar a tabela_1):
tabela_1 %>% gt() %>%
  cols_label(region = md("Região"), n = md("n"), percent = md("%")) %>% 
  cols_width(region ~ px(200), n ~ px(50), percent ~ px(80)) %>%
  cols_align(align = c("left"), columns = region) %>%
  cols_align(align = c("center"), columns = n) %>% 
  cols_align(align = c("center"), columns = percent) %>%
  tab_header(title = md("Regiões administrativas na consulta popular do Chile, 1988"))
Regiões administrativas na consulta popular do Chile, 1988
Região n %
C 600 22.2%
M 100 3.7%
N 322 11.9%
S 718 26.6%
SA 960 35.6%
Total 2700 100.0%

Pasos para exportar como documento de Word

#Primeiro criamos um objeto para salvar nossa tabela feita com gt
tabela_word <- tabela_1 %>%
  gt() %>%
  cols_label(region = md("Região"), n = md("n"), percent = md("%")) %>% 
  cols_width(region ~ px(200), n ~ px(50), percent ~ px(80)) %>%
  cols_align(align = c("left"), columns = region) %>%
  cols_align(align = c("center"), columns = n) %>% 
  cols_align(align = c("center"), columns = percent) %>%
  tab_header(title = md("Regiões administrativas na consulta popular do Chile, 1988"))

# mostrar o diretorio de trabalho
dir <- getwd()
print(dir)
## [1] "C:/Users/zzrg/OneDrive/Desktop/Mis_Carpetas/Doutorado_PEQ/Mini_curso_R/mini_curso_R"
# Depois salvamos como arquivo de Word
tabela_word %>% # Lembrar de colocar o camino hacia o diretorio de trabalho no seu computador, dar um nome ao arquivo Word (exemplo: tabela_gt_Chile) e adicionar no final .docx que indica o tipo de arquivo a ser criado
  gtsave("/Users/zzrg/OneDrive/Desktop/Mis_Carpetas/Doutorado_PEQ/Mini_curso_R/mini_curso_R/tabela_gt_Chile.docx")
# Com certeza vai facilitar o seu trabalho galera!
# Criamos uma tabela cruzada com a função tabyl() do pacote janitor

# Primeiro passo (criar a tabela_2):
tabela_2 <- Chile %>% # O banco de dados com as variáveis de interesse
  tabyl(region, sex) %>% # Entre paréntese coloca a variável de interesse
  adorn_totals("col") %>% #Indicar coluna o fila para totalizar os valores
  adorn_percentages("row") %>% # Apresentar como porcentagens na coluna o na fila
  adorn_pct_formatting(digits = 2) %>% # A formatação das porcentagems
  adorn_ns("front") # Addicionar a n (frequencia absoluta) antes ou depois da porcentagem

# Segundo passo (aperfumar a tabela_2):
tabela_2 %>% gt() %>%
  cols_label(region = md("Região"), F = md("Feminino"), M = md("Masculino"), Total = md("Total")) %>% 
  cols_width(region ~ px(100), F ~ px(150), M ~ px(150), Total ~ px(150)) %>%
  cols_align(align = c("left"), columns = region) %>%
  cols_align(align = c("center"), columns = F) %>% 
  cols_align(align = c("center"), columns = M) %>%
  cols_align(align = c("right"), columns = Total) %>%
  tab_header(title = md("Regiões administrativas por sexo das pessoas na consulta popular do Chile, 1988")) %>% 
  tab_source_note(source_note = "Fonte: Faculdade Latinoamericana de Ciências Sociais / Chile, 1988.")
Regiões administrativas por sexo das pessoas na consulta popular do Chile, 1988
Região Feminino Masculino Total
C 300 (50.00%) 300 (50.00%) 600 (100.00%)
M 51 (51.00%) 49 (49.00%) 100 (100.00%)
N 168 (52.17%) 154 (47.83%) 322 (100.00%)
S 362 (50.42%) 356 (49.58%) 718 (100.00%)
SA 498 (51.88%) 462 (48.12%) 960 (100.00%)
Fonte: Faculdade Latinoamericana de Ciências Sociais / Chile, 1988.
# Pasos para exportar como documento de Word

#Primeiro criamos um objeto para salvar nossa tabela feita com gt
tabela_word_2 <- tabela_2 %>%
  gt() %>%
  cols_label(region = md("Região"), F = md("Feminino"), M = md("Masculino"), Total = md("Total")) %>% 
  cols_width(region ~ px(100), F ~ px(150), M ~ px(150), Total ~ px(150)) %>%
  cols_align(align = c("left"), columns = region) %>%
  cols_align(align = c("center"), columns = F) %>% 
  cols_align(align = c("center"), columns = M) %>%
  cols_align(align = c("right"), columns = Total) %>%
  tab_header(title = md("Regiões administrativas por sexo das pessoas na consulta popular do Chile, 1988")) %>% 
  tab_source_note(source_note = "Fonte: Faculdade Latinoamericana de Ciências Sociais / Chile, 1988.")

# Depois salvamos como arquivo de Word
tabela_word_2 %>% # Lembrar de colocar o camino hacia o diretorio de trabalho no seu computador, dar um nome ao arquivo Word (exemplo: tabela_gt_Chile_2) e adicionar no final .docx que indica o tipo de arquivo a ser criado
  gtsave("/Users/zzrg/OneDrive/Desktop/Mis_Carpetas/Doutorado_PEQ/Mini_curso_R/mini_curso_R/tabela_gt_Chile_2.docx")

# A tabela vai ficar salva no seu computador no diretorio (e pasta específica) que você indicou pra o R

BOMUN:

Agora fazemos uma tabela resumo das medidas de tendença central de uma variável numérica usando a função get_summary_stats() do pacote rstatix

# install.packages("rstatix") # Instalar o pacote rstatix
library(rstatix) # Chamar o pacote rstatix

# Carregamos o banco de dado chamado penguins do pacote modeldata
#install.packages("modeldata") # Instalamos o pacote
library(modeldata) # Chamamos o pacote

# Install the package (if not already installed)
#install.packages("palmerpenguins")

# Load the package
library(palmerpenguins)

dados <- na.omit(penguins) # Carregamos os dados, criamos o objeto dados, e removendo os NAs (dados perdidos)
head(dados) # Chamamos as primeiras 6 linhas do banco de dados
## # A tibble: 6 × 8
##   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
##   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
## 1 Adelie  Torgersen           39.1          18.7               181        3750
## 2 Adelie  Torgersen           39.5          17.4               186        3800
## 3 Adelie  Torgersen           40.3          18                 195        3250
## 4 Adelie  Torgersen           36.7          19.3               193        3450
## 5 Adelie  Torgersen           39.3          20.6               190        3650
## 6 Adelie  Torgersen           38.9          17.8               181        3625
## # ℹ 2 more variables: sex <fct>, year <int>
# Criamos uma tabela resumo (variável numérica) com a função get_summary_stats do pacote rstatix
dados %>% # Indicamos o banco de dados
  get_summary_stats(body_mass_g, type = "full", # Indicamos a variável de interesse (neste caso body_mass_g)
                    show = c("n", "min", "mean", "sd", "median", "max")) # Incluimos a n, valor mínimo, média, desvio padrão, mediana, e valor máximo (pode adicionar mais medidas, consultat informações no help)
## # A tibble: 1 × 7
##   variable        n   min  mean    sd median   max
##   <fct>       <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl>
## 1 body_mass_g   333  2700 4207.  805.   4050  6300
peso <- dados %>% # Indicamos o banco de dados que tem a nossa variável de interesse
  renamendice_massa_corporal = body_mass_g) %>% # Renomeamos (com função rename()) a variável de interesse (passamos do inglê es ao português)
  select(Índice_massa_corporal) %>% # Selecionamos (com a função select()) a variável de interesse (agora ela se chama Índice_massa_corporal e já não body_mass_g)
  get_summary_stats(type = "full", # Como a variável de interesse já foi selecionada na linha da acima, não precisamos voltar a colocar-la nesta linha
                    show = c("n", "min", "mean", "sd", "median", "max")) # Incluimos a n, valor mínimo, média, desvio padrão, mediana, e valor máximo
peso
## # A tibble: 1 × 7
##   variable                  n   min  mean    sd median   max
##   <fct>                 <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl>
## 1 Índice_massa_corporal   333  2700 4207.  805.   4050  6300
# Aperfumamos a tabela peso com funções do pacote gt
peso %>% gt() %>%
  cols_label(variable = md("Variável"), n = md("n"), min = md("Valor Mínimo"),
             mean = md("Média"), sd = md("D. Padrão"),  median = md("Mediana"),
             max = md("Valor Máximo")) %>% 
  cols_width(variable ~ px(200), n ~ px(50), min ~ px(100), mean ~ px(100),
             sd ~ px(100), median ~ px(100), max ~ px(100)) %>%
  cols_align(align = c("left"), columns = variable) %>%
  cols_align(align = c("center"), columns = n) %>% 
  cols_align(align = c("center"), columns = min) %>%
  cols_align(align = c("center"), columns = mean) %>%
  cols_align(align = c("center"), columns = sd) %>%
  cols_align(align = c("center"), columns = median) %>%
  cols_align(align = c("center"), columns = max) %>%
  tab_header(title = md("Medidas de tendença central da variável IMC"))
Medidas de tendença central da variável IMC
Variável n Valor Mínimo Média D. Padrão Mediana Valor Máximo
Índice_massa_corporal 333 2700 4207.057 805.216 4050 6300

7 Visualização de Dados no R

Gráficos no R Base

# Histograma (variáveis númericas)
hist(Chile$age) # Codigo básico

# Histograma (Aperfumado)
hist(Chile$age, main = "Histograma", xlab = "Idade", ylab = "Frequência", # Adicionamos um título, e nomes aos eixos X e Y
     col = "lightblue", border = "black") # Adicionamos as cores as barras e aos bordes

# Gráfico de barras (para variáveis categóricas)
barplot(table(Chile$sex)) # Código básico

# Gráfico de barras (Aperfumamos)
barplot(table(Chile$sex), col = c("lightblue", "pink"), # Adicionamos cores a cada categoria
        main = "Distribuição por sexo", xlab = "Sexo", ylab = "Frequência") # Adicionamos um título e nomes ao eixos X e Y 

# Boxplot (variáveis numérica, mas pode ser combinado com uma variável categórica para olhar differenças entre grupos)
boxplot(Chile$age ~ Chile$sex) # Codigo básico

# Boxplot (Aperfumamos)
boxplot(Chile$age ~ Chile$sex, main = "Boxplot", xlab = "Sexo", ylab = "Idade", # Adicionamos um título e nomes ao eixos X e Y
        col = c("pink", "lightblue")) # Adicionamos cores a cada categoria

Visialização de dados com o pacote ggplot2 (a coisa mais legal do mundo!)

# install.packages("ggplot2") # Instalamos o pacote
library(ggplot2) # Chamamos o pacote

# Para essa parte, voltamos a chamar o banco de dados penguins
dados <- na.omit(penguins) # Carregamos os dados, criamos o objeto dados, e removendo os NAs (dados perdidos)
head(dados) # Chamamos as primeiras 6 linhas do banco de dados
## # A tibble: 6 × 8
##   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
##   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
## 1 Adelie  Torgersen           39.1          18.7               181        3750
## 2 Adelie  Torgersen           39.5          17.4               186        3800
## 3 Adelie  Torgersen           40.3          18                 195        3250
## 4 Adelie  Torgersen           36.7          19.3               193        3450
## 5 Adelie  Torgersen           39.3          20.6               190        3650
## 6 Adelie  Torgersen           38.9          17.8               181        3625
## # ℹ 2 more variables: sex <fct>, year <int>
# Agora criamos um banco de dados final (dados_final) com os dados do banco penguins
dados1 <- rename(dados, especies = species, # Renomeamos as colunas (variáveis) do inglês ao português
                 ilha = island, 
                 comprimento_bico_mm = bill_length_mm,
                 largura_bico_mm = bill_depth_mm, 
                 comprimento_asa_mm = flipper_length_mm,
                 massa_corporal_g = body_mass_g,
                 sexo = sex) 
dados2 <- arrange(dados1, massa_corporal_g) # Ordenamos os dados com base na coluna massa_corporal_g
dados_final <- mutate(dados2, razao = comprimento_bico_mm/largura_bico_mm) # Criamos uma nova variável (coluna) chamada razao

#Gráfico de barras (variável categórica)

ggplot(dados_final, aes(especies)) + # Nessa linha, colocamos o nome do banco de dados, seguido por a função aes(aqui va o nome da variável que desejamos plotar)
  geom_bar(fill = "green") + # Indicamos o tipo de gráfico (geom_bar neste caso), podemos addicionar uma cor
  xlab("Espécies") + # Renomeamos o eixo X
  ylab("Contagem") + # Renomeamos o eixo Y
  ggtitle("Contagem de espécies de pássaros", # Adicionamos um título
          subtitle = "nos anos de 2007, 2008 e 2009") # Adicionamos um subtítulo

# Diferenciar por cor cada coluna
ggplot(dados_final, aes(especies, fill = especies)) + # Nessa linha, colocamos o nome do banco de dados, seguido por a função aes(aqui va o nome da variável que desejamos plotar)
  geom_bar() + # Indicamos o tipo de gráfico (geom_bar neste caso), podemos addicionar uma cor
  xlab("Espécies") + # Renomeamos o eixo X
  ylab("Contagem") + # Renomeamos o eixo Y
  ggtitle("Contagem de espécies de pássaros", # Adicionamos um título
          subtitle = "nos anos de 2007, 2008 e 2009") # Adicionamos um subtítulo

# Diferenciar por cor cada coluna e renomeando a legenda do gráfico (linha 640 do código)
ggplot(dados_final, aes(especies, fill = especies)) + # Nessa linha, podemos adicionar o comando fill= seguido da variável especies para colocar cor diferente para cada categoría 
  geom_bar() + # Indicamos o tipo de gráfico (geom_bar neste caso)
  labs(x = "Espécies", # Outro jeito de renomeamos o eixo X
       y = "Contagem", # Outro jeito de renomeamos o eixo Y
       fill = "Espécies de Penguins") + # Renomeamos a legenda das categorías das espécies dos penguins
  ggtitle("Contagem de espécies de pássaros", # Adicionamos um título
          subtitle = "nos anos de 2007, 2008 e 2009") # Adicionamos um subtítulo

# Diferenciar por cor cada coluna (com as cores da nossa própria escolha!)

cores <- c("red", "blue", "yellow") # Criamos um objeto contendo as cores que desejamos colocar a nossas categorias

ggplot(dados_final, aes(especies)) + # Nessa linha colocamos a variável de interesse.
  geom_bar(fill = cores) + # Indicamos o tipo de gráfico (geom_bar neste caso), e indicamos as cores contidas em nosso objeto chamado cores
  xlab("Espécies") + # Renomeamos o eixo X
  ylab("Contagem") + # Renomeamos o eixo Y
  ggtitle("Contagem de espécies de pássaros", # Adicionamos um título
          subtitle = "nos anos de 2007, 2008 e 2009") # Adicionamos um subtítulo

cores_2 <- c("#FE85AD", "#48144F", "#555599") # Podemos selecionar otras cores (podem consultar esse link: https://pmassicotte.github.io/paletteer_gallery/)
ggplot(dados_final, aes(ilha))+
  geom_bar(fill = cores_2)+
  xlab("Ilha") +
  ylab("Contagem") + 
  ggtitle("Contagem de ilhas onde moram os pássaros", # Adicionamos um título
          subtitle = "para os de 2007, 2008 e 2009")

# Histograma

cores_3 <- c("#088BBEFF") # A número de cores tem que concordar com o número de categorías da variável

ggplot(dados_final, aes(largura_bico_mm))+
  geom_histogram(fill = cores_3)+
  xlab("Largura do bico (em mm)") +
  ylab("Frequência") + 
  ggtitle("Frequência da largura de bico dos pássaros")

cores_4 <- c("#C17D17FF") # A número de cores tem que concordar com o número de categorías da variável

ggplot(dados_final, aes(razao))+
  geom_histogram(fill = cores_4)+
  xlab("Razão (em mm)") +
  ylab("Frequência") + 
  ggtitle("Frequência da razão do cumprimento e largura do bico")

# Boxplot

cores_5 <- c("#A28F59FF") # A número de cores tem que concordar com o número de categorías da variável

ggplot(dados_final, aes(largura_bico_mm))+
  geom_boxplot(fill = cores_5)+
  xlab("Larguro do Bico (em mm)") +
  ggtitle("Frequência da Largura do Bico")

# Trocamos os eixos
ggplot(dados_final, aes(y = largura_bico_mm))+
  geom_boxplot(fill = cores_5)+
  ylab("Larguro do Bico (em mm)") +
  ggtitle("Frequência da Largura do Bico")

cores_6 <- c("#484860FF", "#486078FF", "#D8D8D8FF") # A número de cores tem que concordar com o número de categorías da variável 

ggplot(dados_final, aes(largura_bico_mm, especies))+
  geom_boxplot(fill = cores_6)+
  xlab("Larguro do Bico (em mm)") +
  ylab("Especies de Pinguins") +
  ggtitle("Frequência da Largura do Bico por Especie de Pinguin")

# Trocamos os eixos X e Y
ggplot(dados_final, aes(especies, largura_bico_mm))+
  geom_boxplot(fill = cores_6)+
  ylab("Larguro do Bico (em mm)") +
  xlab("Especies de Pinguins") +
  ggtitle("Frequência da Largura do Bico por Especie de Pinguin")

ggplot(dados_final, aes(especies, comprimento_bico_mm))+
  geom_boxplot(fill = cores_6)+
  ylab("Comprimento do Bico (em mm)") +
  xlab("Especies de Pinguins") +
  ggtitle("Frequência do Comprimento do Bico por Especie de Pinguin")

ggplot(dados_final, aes(especies, razao))+
  geom_boxplot(fill = cores_6)+
  ylab("Razão Comprimento / Largura do Bico (em mm)") +
  xlab("Especies de Pinguins") +
  ggtitle("Frequência da Ração do Cumprimento e a Largura do Bico por Especie de Pinguin")

# Scatter plot
ggplot(dados_final, aes(largura_bico_mm, comprimento_bico_mm)) + # Nessa linha, colocamos o nome do banco de dados, seguido por aes(nome das variáveis que desejamos plotar)
  geom_point() + # Indicamos o tipo de gráfico
  xlab("Cumprimento do bico (em mm)") +
  ylab("Largura do bico (em mm)") + 
  ggtitle("Relação entre o Cumprimento e a Largura do Bico dos Pinguins")

# Scatter plot mais detalhado
ggplot(dados_final, aes(largura_bico_mm, comprimento_bico_mm)) + # Nessa linha, colocamos o nome do banco de dados, seguido por aes(nome das variáveis que desejamos plotar)
  geom_point(colour = "#00740EFF") + # Indicamos o tipo de gráfico e uma cor (opcional)
  geom_smooth(method = "lm", level = 0.95, col = "#B53737FF", linewidth = 0.75) + # Adicionamos uma linha de tendença (com o método lm), intervalo de confiânza, uma cor diferente, e uma espesura na linha
  xlab("Cumprimento do bico (em mm)") +
  ylab("Largura do bico (em mm)") + 
  ggtitle("Relação entre o Cumprimento e a Largura do Bico dos Pinguins")

Beleza galera, novamente, muito obrigado pela sua participação e esforzo!!!!! Eu curti muito de voçês, voçês tem sido uma ÓTIMA turma!!! Desejo que, agora, o R já não seja tão “tortuoso” pra todas e todos vocês. Fico a disposição pra o que eu possa apoiar vocês, é só me falar, ta?

ABRAÇOS galera!