INTRODUÇÃO À ESTATÍSTICA

SEMANA 3: IMPORTAÇÃO E MANIPULAÇÃO DE DADOS I

PROF. GUILHERME AUGUSTO VELOSO

PRIMEIRO SEMESTRE DE 2023

1 Diretório de Trabalho

Um passo importante na tarefa de importação de dados para o R é saber onde está o arquivo que queremos importar. Toda função de importação vai exigir um caminho que representa o endereço do arquivo no computador.

O diretório de trabalho (working directory) nada mais é do que a pasta em que o R vai procurar arquivos na hora de ler informações ou gravar arquivos na hora de salvar objetos.

Se você não souber qual é o seu diretório de trabalho, você pode descobri-lo usando a seguinte função:

# Descobrindo o diretório atual
getwd()

Essa função vai devolver o caminho do seu diretório de trabalho.

A função setwd() pode ser utilizada para mudar o diretório de trabalho. Como argumento, ela recebe o caminho para o novo diretório:

setwd("Endereço-do-diretório")

Outra maneira de estabelecer o diretório de trabalho é ir em Session - Set Working Directory e então escolha dentre suas pastas o diretório de trabalho desejado.

2 Aplicação Prática

Utilizaremos, como exemplo, os dados coletados por alunas do curso de pós-graduação em nutrição da UFF com informações sobre 2210 pessoas que responderam um questionário online no ano de 2022. O estudo tem por objetivo avaliar a alteração alimentar dos respondentes com respeito à pandemia. As variáveis coletadas foram:

  • Gênero: Feminino, Masculino, Outro e Prefiro não Responder;
  • Idade, em anos;
  • Região: Norte, Nordeste, Centro-Oeste, Sul e Sudeste;
  • Isolamento durante a pandemia: Sim e Não;
  • Renda Familiar: Até R$ 1254,00, entre R$1255,00 e R$8640,00 e mais que R$8640,00;
  • Alteração Nutricional durante a Pandemia: Sim e Não;
  • Peso, em quilos;
  • Altura, em metros.

Os arquivos estão com os nomes Dados.txt, Dados.xlsx e Dados.csv. Coloque os arquivos em seu diretório de preferência.

3 Formatos de Arquivos de Dados

Nesse curso, exemplificaremos a importação de bases de dados em três formatos muito comuns: .txt, .xlsx e csv. Importante ressaltar que existem muitos outros formatos de dados e, pra cada estrutura, o R terá uma função própria para sua importação.

3.1 Formato .txt

TXT é uma abreviação para Arquivo de Texto. Os arquivos TXT são usados para armazenar dados de texto simples não formatados. Documentos de texto simples salvos no formato TXT podem ser criados, abertos e editados utilizando uma grande variedade de programas de processamento de texto e edição de texto desenvolvidos para sistemas Linux, Microsoft computadores e plataformas Mac baseados em Windows.

3.2 Formato .xlsx ou .xls

O arquivo do Microsoft Excel que possui a extensão .XLSX ou .XLS é uma planilha. Sendo assim, seu conteúdo pode ser o mais variado possível. De seu controle de estoque até o sistema de ponto eletrônico de sua empresa. Ainda dentro desses arquivos é possível criar outras planilhas, que podem ser relacionadas ou não.

Essa planilha é constituída de linhas e colunas, o encontro delas é chamado de célula, nessa célula é onde as informações são escritas. Por isso, elas podem ser formatadas e transformadas conforme sua necessidade.

3.3 Formato .csv

Por definição, CSV é um formato de arquivo que significa “comma-separated-values” (valores separados por vírgulas). Isso significa que os campos de dados indicados neste formato normalmente são separados ou delimitados por uma vírgula.

A grande vantagem de um arquivo CSV é o fato de ele possibilitar a importação e exportação arquivos de uma linguagem que vários aplicativos podem ler.

Muitas vezes, quando você vai fazer uma importação de dados em algum sistema, você vai notar que de cara ele pede um arquivo em formato CSV.

4 O pacote readr

O pacote readr faz parte do grande leque de pacotes do tidyverse e é responsável por auxiliar na leitura de arquivos .txt e .csv.

O readr transforma arquivos de textos em tibbles. No tidyverse, tibbles é a unidade fundamental de armazenamento de dados retangulares. Dentre as funções do pacote, temos:

  • read_csv(): para arquivos separados por vírgula.

  • read_delim(): para arquivos separados por um delimitador genérico. O argumento delim= indica qual caractere separa cada coluna no arquivo de texto.

  • read_table(): para arquivos de texto tabular com colunas separadas por espaço.

4.1 Importando arquivos .txt

Para ler arquivos .txt com o pacore readr, utilizaremos a função read_delim(), especificando o delimitador para TAB. A seguir, seguem os comandos para a leitura dos dados da alteração nutricional durante a pandemia:

# Carregando o universo tidyverse
library("tidyverse")
## Warning: package 'tidyverse' was built under R version 4.2.3
## Warning: package 'readr' was built under R version 4.2.3
## Warning: package 'forcats' was built under R version 4.2.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.0     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.1     ✔ tibble    3.1.8
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
# Carregando a biblioteca readr
library("readr")
# Lendo a base de dados no formato .txt com delimitador tab
dadostxt = read_delim(file = "Dados.txt", delim = "\t")
## Rows: 2210 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: "\t"
## chr (5): Genero, Regiao, Isolamento, Renda_familiar, Alteracao_Pandemia
## dbl (3): Idade, Peso, Altura
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
dadostxt
## # A tibble: 2,210 × 8
##    Genero    Idade Regiao       Isolamento Renda_familiar   Alter…¹  Peso Altura
##    <chr>     <dbl> <chr>        <chr>      <chr>            <chr>   <dbl>  <dbl>
##  1 Masculino    38 Sul          Não        entre R$ 1.255 … Não      99     1.7 
##  2 Masculino    28 Sudeste      Sim        mais de R$ 8.640 Sim      95.6   1.95
##  3 Feminino     24 Sudeste      Não        até R$ 1254,00   Sim      91     1.71
##  4 Feminino     26 Norte        Não        até R$ 1254,00   Sim      90.5   1.68
##  5 Feminino     56 Sudeste      Não        entre R$ 1.255 … Não      87.8   1.68
##  6 Masculino    22 Centro-oeste Não        entre R$ 1.255 … Não      86.2   1.85
##  7 Feminino     43 Centro-oeste Sim        entre R$ 1.255 … Não      85     1.67
##  8 Feminino     69 Sudeste      Sim        entre R$ 1.255 … Não      83.2   1.7 
##  9 Feminino     34 Norte        Não        entre R$ 1.255 … Sim      80.9   1.59
## 10 Feminino     29 Centro-oeste Sim        entre R$ 1.255 … Sim      80.6   1.68
## # … with 2,200 more rows, and abbreviated variable name ¹​Alteracao_Pandemia

4.2 Importando arquivos .csv

Para ler arquivos .csv com o pacore readr, utilizaremos a função read_csv(). A seguir, seguem os comandos para a leitura dos dados de alteração nutricional durante a pandemia:

# Lendo a base de dados no formato .csv
dadoscsv = read_csv(file = "Dados.csv")
## Rows: 2210 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): Genero, Regiao, Isolamento, Renda_familiar, Alteracao_Pandemia
## dbl (3): Idade, Peso, Altura
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
dadoscsv
## # A tibble: 2,210 × 8
##    Genero    Idade Regiao       Isolamento Renda_familiar   Alter…¹  Peso Altura
##    <chr>     <dbl> <chr>        <chr>      <chr>            <chr>   <dbl>  <dbl>
##  1 Masculino    38 Sul          Não        entre R$ 1.255 … Não      99     1.7 
##  2 Masculino    28 Sudeste      Sim        mais de R$ 8.640 Sim      95.6   1.95
##  3 Feminino     24 Sudeste      Não        até R$ 1254,00   Sim      91     1.71
##  4 Feminino     26 Norte        Não        até R$ 1254,00   Sim      90.5   1.68
##  5 Feminino     56 Sudeste      Não        entre R$ 1.255 … Não      87.8   1.68
##  6 Masculino    22 Centro-oeste Não        entre R$ 1.255 … Não      86.2   1.85
##  7 Feminino     43 Centro-oeste Sim        entre R$ 1.255 … Não      85     1.67
##  8 Feminino     69 Sudeste      Sim        entre R$ 1.255 … Não      83.2   1.7 
##  9 Feminino     34 Norte        Não        entre R$ 1.255 … Sim      80.9   1.59
## 10 Feminino     29 Centro-oeste Sim        entre R$ 1.255 … Sim      80.6   1.68
## # … with 2,200 more rows, and abbreviated variable name ¹​Alteracao_Pandemia

5 O pacote readxl

O pacote readxl permite a leitura de arquivos .xlsx ou .xls.

5.1 Importando arquivos .xlsx ou .xls

Para ler planilhas do Excel (arquivos .xlsx ou .xls), basta utilizarmos a função read_xlsx() do pacote readxl. A seguir, seguem os comandos para a leitura dos dados de alteração nutricional durante a pandemia:

# Carregando a biblioteca readxl
library("readxl")
# Lendo a base de dados no formato .xlsx
dadosxlsx = read_xlsx(path = "Dados.xlsx")
dadosxlsx
## # A tibble: 2,210 × 8
##    Genero    Idade Regiao       Isolamento Renda_familiar   Alter…¹  Peso Altura
##    <chr>     <dbl> <chr>        <chr>      <chr>            <chr>   <dbl>  <dbl>
##  1 Masculino    38 Sul          Não        entre R$ 1.255 … Não      99     1.7 
##  2 Masculino    28 Sudeste      Sim        mais de R$ 8.640 Sim      95.6   1.95
##  3 Feminino     24 Sudeste      Não        até R$ 1254,00   Sim      91     1.71
##  4 Feminino     26 Norte        Não        até R$ 1254,00   Sim      90.5   1.68
##  5 Feminino     56 Sudeste      Não        entre R$ 1.255 … Não      87.8   1.68
##  6 Masculino    22 Centro-oeste Não        entre R$ 1.255 … Não      86.2   1.85
##  7 Feminino     43 Centro-oeste Sim        entre R$ 1.255 … Não      85     1.67
##  8 Feminino     69 Sudeste      Sim        entre R$ 1.255 … Não      83.2   1.7 
##  9 Feminino     34 Norte        Não        entre R$ 1.255 … Sim      80.9   1.59
## 10 Feminino     29 Centro-oeste Sim        entre R$ 1.255 … Sim      80.6   1.68
## # … with 2,200 more rows, and abbreviated variable name ¹​Alteracao_Pandemia

Por padrão, as funções de leitura trarão apenas a primeira planilha do arquivo. Para trazer outra planilha, basta utilizarmos o argumento sheet.

6 Informações Adicionais

A maioria das funções de leitura do readr e readxl possuem argumentos muito úteis para resolver problemas de importação:

  • col_names=: indica se a primeira linha da base contém ou não o nome das colunas. Também pode ser utilizado para (re)nomear colunas.

  • col_types=: caso alguma coluna seja importada com a classe errada (uma coluna de números foi importada como texto, por exemplo), você pode usar esse argumento para especificar a classe das colunas.

  • locale=: útil para tratar problema de encoding.

  • skip=: pula linhas no começo do arquivo antes de iniciar a importação. Útil para quando o arquivo a ser importado vem com metadados ou qualquer tipo de texto nas primeiras linhas, antes da base.

  • na=: indica quais caracteres deverão ser considerados NA na hora da importação.

Para a maioria das funções read_, existe uma respectiva função write_. Essas funções servem para salvar bases em um formato específico de arquivo. Além do caminho/nome do arquivo a ser criado, você também precisa passar o objeto que será escrito. Para o arquivo criado funcionar corretamente, você precisa especificar a extensão correta no nome do arquivo. Por exemplo,

write_csv(x = nome-do-objeto, path = "nome-do-arquivo.csv")

Para ler arquivos gerados por outros softwares, como SPSS, SAS e STATA, você pode usar as funções do pacote haven. Este pacote faz parte do tidyverse.

7 Operador pipe %>%

O operador %>% (pipe) foi uma das grandes revoluções recentes do R, tornando a escrita e leitura de códigos mais intuitiva e compreensível. Ele foi introduzido por Stefan Milton Bache no pacote magrittr.

A ideia do operador %>% (pipe) é bem simples: usar o valor resultante da expressão do lado esquerdo como primeiro argumento da função do lado direito.

Vejamos um exemplo:

x = c(1, 2, 3, 4)

# Vamos calcular a raiz quadrada da soma dos valores de 1 a 4. Primeiro, sem o pipe.
sqrt(sum(x))
## [1] 3.162278
# Agora com o pipe.

x %>% sum() %>% sqrt()
## [1] 3.162278

O caminho que o código x %>% sum %>% sqrt seguiu foi enviar o objeto x como argumento da função sum() e, em seguida, enviar a saida da expressão sum(x) como argumento da função sqrt(). Observe que escrevemos o código na mesma ordem em que as operações são realizadas. A utilização de parênteses após o nome das funções não é necessário, mas recomendável.

Para que seja feita a sequência de manipulações nas bases de dados, utilizaremos o pipe para organizar as operações.

8 Manipulação dos Dados

Esta seção trata do tema manipulação de dados. Trata-se de uma tarefa dolorosa e demorada, tomando muitas vezes a maior parte do tempo de uma análise de dados. Essa etapa é essencial para o sucesso da análise.

Usualmente, os estatísticos e analistas de dados partem de uma base “crua” e a transformam até obter uma base de dados analítica, que, a menos de transformações simples, está preparada para gerar tabelas e gráficos e aplicação de modelos.

É importante lembrar que

  • Cada linha da base representa uma observação.
  • Cada coluna da base representa uma variável.

9 O Pacote dplyr

O dplyr é o pacote mais útil para realizar transformação de dados, aliando simplicidade e eficiência de uma forma elegante. Os scripts em R que fazem uso inteligentes dos verbos dplyr e as facilidades do operador pipe tendem a ficar mais legíveis e organizados, sem perder velocidade de execução.

Para exemplificar, utilizaremos a base de dados em formato .csv. Dessa forma,

library("dplyr")
library("readr")
# Chamando de dados a base dadoscsv
dados = read_csv(file = "Dados.csv")
## Rows: 2210 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): Genero, Regiao, Isolamento, Renda_familiar, Alteracao_Pandemia
## dbl (3): Idade, Peso, Altura
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Nas próximas seções, veremos alguns exemplos de funções do dplyr. Ao longo do curso, mais funções desse pacote serão exploradas.

9.1 Função rename

Esta função renomeia nomes de colunas (variáveis)**

# Obtendo o nome das colunas
colnames(dados)
## [1] "Genero"             "Idade"              "Regiao"            
## [4] "Isolamento"         "Renda_familiar"     "Alteracao_Pandemia"
## [7] "Peso"               "Altura"
# Alterando o nome da variável Isolamento para Isolamento_Social
dados = dados %>% rename(Isolamento_Social=Isolamento)
dados
## # A tibble: 2,210 × 8
##    Genero    Idade Regiao       Isolamento_Social Renda_f…¹ Alter…²  Peso Altura
##    <chr>     <dbl> <chr>        <chr>             <chr>     <chr>   <dbl>  <dbl>
##  1 Masculino    38 Sul          Não               entre R$… Não      99     1.7 
##  2 Masculino    28 Sudeste      Sim               mais de … Sim      95.6   1.95
##  3 Feminino     24 Sudeste      Não               até R$ 1… Sim      91     1.71
##  4 Feminino     26 Norte        Não               até R$ 1… Sim      90.5   1.68
##  5 Feminino     56 Sudeste      Não               entre R$… Não      87.8   1.68
##  6 Masculino    22 Centro-oeste Não               entre R$… Não      86.2   1.85
##  7 Feminino     43 Centro-oeste Sim               entre R$… Não      85     1.67
##  8 Feminino     69 Sudeste      Sim               entre R$… Não      83.2   1.7 
##  9 Feminino     34 Norte        Não               entre R$… Sim      80.9   1.59
## 10 Feminino     29 Centro-oeste Sim               entre R$… Sim      80.6   1.68
## # … with 2,200 more rows, and abbreviated variable names ¹​Renda_familiar,
## #   ²​Alteracao_Pandemia

9.2 Função select

Esta função seleciona colunas (variáveis).

É possível fazer essa seleção utilizando nomes, índices, intervalos de variáveis ou utilizar as funções starts_with(x), ends_with(x), contains(x), matches(x), one_of(x) para selecionar as variáveis.

# Selecionando as variáveis Genero, Idade e Alteração_Pandemia
sub_dados = dados %>% select(Genero,Idade,Alteracao_Pandemia)
sub_dados
## # A tibble: 2,210 × 3
##    Genero    Idade Alteracao_Pandemia
##    <chr>     <dbl> <chr>             
##  1 Masculino    38 Não               
##  2 Masculino    28 Sim               
##  3 Feminino     24 Sim               
##  4 Feminino     26 Sim               
##  5 Feminino     56 Não               
##  6 Masculino    22 Não               
##  7 Feminino     43 Não               
##  8 Feminino     69 Não               
##  9 Feminino     34 Sim               
## 10 Feminino     29 Sim               
## # … with 2,200 more rows
# Selecionando as variáveis a partir de Genero até Alteracao_Pandemia
sub_dados = dados %>% select(Genero:Alteracao_Pandemia)
sub_dados
## # A tibble: 2,210 × 6
##    Genero    Idade Regiao       Isolamento_Social Renda_familiar         Alter…¹
##    <chr>     <dbl> <chr>        <chr>             <chr>                  <chr>  
##  1 Masculino    38 Sul          Não               entre R$ 1.255 - R$ 8… Não    
##  2 Masculino    28 Sudeste      Sim               mais de R$ 8.640       Sim    
##  3 Feminino     24 Sudeste      Não               até R$ 1254,00         Sim    
##  4 Feminino     26 Norte        Não               até R$ 1254,00         Sim    
##  5 Feminino     56 Sudeste      Não               entre R$ 1.255 - R$ 8… Não    
##  6 Masculino    22 Centro-oeste Não               entre R$ 1.255 - R$ 8… Não    
##  7 Feminino     43 Centro-oeste Sim               entre R$ 1.255 - R$ 8… Não    
##  8 Feminino     69 Sudeste      Sim               entre R$ 1.255 - R$ 8… Não    
##  9 Feminino     34 Norte        Não               entre R$ 1.255 - R$ 8… Sim    
## 10 Feminino     29 Centro-oeste Sim               entre R$ 1.255 - R$ 8… Sim    
## # … with 2,200 more rows, and abbreviated variable name ¹​Alteracao_Pandemia
# Selecionando todas as variáveis exceto Idade
sub_dados = dados %>% select(-Idade)
sub_dados
## # A tibble: 2,210 × 7
##    Genero    Regiao       Isolamento_Social Renda_familiar  Alter…¹  Peso Altura
##    <chr>     <chr>        <chr>             <chr>           <chr>   <dbl>  <dbl>
##  1 Masculino Sul          Não               entre R$ 1.255… Não      99     1.7 
##  2 Masculino Sudeste      Sim               mais de R$ 8.6… Sim      95.6   1.95
##  3 Feminino  Sudeste      Não               até R$ 1254,00  Sim      91     1.71
##  4 Feminino  Norte        Não               até R$ 1254,00  Sim      90.5   1.68
##  5 Feminino  Sudeste      Não               entre R$ 1.255… Não      87.8   1.68
##  6 Masculino Centro-oeste Não               entre R$ 1.255… Não      86.2   1.85
##  7 Feminino  Centro-oeste Sim               entre R$ 1.255… Não      85     1.67
##  8 Feminino  Sudeste      Sim               entre R$ 1.255… Não      83.2   1.7 
##  9 Feminino  Norte        Não               entre R$ 1.255… Sim      80.9   1.59
## 10 Feminino  Centro-oeste Sim               entre R$ 1.255… Sim      80.6   1.68
## # … with 2,200 more rows, and abbreviated variable name ¹​Alteracao_Pandemia
# Selecionando as variáveis que começam com I
sub_dados = dados %>% select(starts_with("I"))
sub_dados
## # A tibble: 2,210 × 2
##    Idade Isolamento_Social
##    <dbl> <chr>            
##  1    38 Não              
##  2    28 Sim              
##  3    24 Não              
##  4    26 Não              
##  5    56 Não              
##  6    22 Não              
##  7    43 Sim              
##  8    69 Sim              
##  9    34 Não              
## 10    29 Sim              
## # … with 2,200 more rows

9.3 Função filter

Diferentemente da função select que filtra colunas, a função filter serve para filtrar linhas.

# Filtrando a região Norte
sub_dados = dados %>% filter(Regiao == "Norte")
sub_dados
## # A tibble: 316 × 8
##    Genero    Idade Regiao Isolamento_Social Renda_familiar  Alter…¹  Peso Altura
##    <chr>     <dbl> <chr>  <chr>             <chr>           <chr>   <dbl>  <dbl>
##  1 Feminino     26 Norte  Não               até R$ 1254,00  Sim      90.5   1.68
##  2 Feminino     34 Norte  Não               entre R$ 1.255… Sim      80.9   1.59
##  3 Feminino     32 Norte  Sim               entre R$ 1.255… Sim      72.3   1.6 
##  4 Feminino     22 Norte  Sim               até R$ 1254,00  Sim      57.4   1.59
##  5 Feminino     47 Norte  Não               mais de R$ 8.6… Não      51.2   1.57
##  6 Masculino    23 Norte  Não               entre R$ 1.255… Não      50.5   1.64
##  7 Feminino     22 Norte  Sim               até R$ 1254,00  Sim      50     1.54
##  8 Feminino     22 Norte  Sim               até R$ 1254,00  Não      50     1.4 
##  9 Masculino    44 Norte  Não               mais de R$ 8.6… Sim     136.    1.77
## 10 Masculino    39 Norte  Sim               entre R$ 1.255… Sim     135     1.77
## # … with 306 more rows, and abbreviated variable name ¹​Alteracao_Pandemia
# Filtrando a idade > 40
sub_dados = dados %>% filter(Idade > 40)
sub_dados
## # A tibble: 648 × 8
##    Genero    Idade Regiao       Isolamento_Social Renda_f…¹ Alter…²  Peso Altura
##    <chr>     <dbl> <chr>        <chr>             <chr>     <chr>   <dbl>  <dbl>
##  1 Feminino     56 Sudeste      Não               entre R$… Não      87.8   1.68
##  2 Feminino     43 Centro-oeste Sim               entre R$… Não      85     1.67
##  3 Feminino     69 Sudeste      Sim               entre R$… Não      83.2   1.7 
##  4 Feminino     63 Sudeste      Não               mais de … Sim      80     1.6 
##  5 Feminino     48 Sudeste      Sim               entre R$… Sim      75.5   1.61
##  6 Feminino     51 Nordeste     Sim               entre R$… Sim      68     1.63
##  7 Feminino     73 Centro-oeste Sim               entre R$… Não      67.4   1.58
##  8 Feminino     56 Sudeste      Sim               entre R$… Sim      63.9   1.62
##  9 Feminino     47 Norte        Não               mais de … Não      51.2   1.57
## 10 Masculino    44 Norte        Não               mais de … Sim     136.    1.77
## # … with 638 more rows, and abbreviated variable names ¹​Renda_familiar,
## #   ²​Alteracao_Pandemia
# Excluindo pessoas do gênero masculino
subdados = dados %>% filter(Genero != "Masculino")
subdados
## # A tibble: 1,644 × 8
##    Genero   Idade Regiao       Isolamento_Social Renda_fa…¹ Alter…²  Peso Altura
##    <chr>    <dbl> <chr>        <chr>             <chr>      <chr>   <dbl>  <dbl>
##  1 Feminino    24 Sudeste      Não               até R$ 12… Sim      91     1.71
##  2 Feminino    26 Norte        Não               até R$ 12… Sim      90.5   1.68
##  3 Feminino    56 Sudeste      Não               entre R$ … Não      87.8   1.68
##  4 Feminino    43 Centro-oeste Sim               entre R$ … Não      85     1.67
##  5 Feminino    69 Sudeste      Sim               entre R$ … Não      83.2   1.7 
##  6 Feminino    34 Norte        Não               entre R$ … Sim      80.9   1.59
##  7 Feminino    29 Centro-oeste Sim               entre R$ … Sim      80.6   1.68
##  8 Feminino    63 Sudeste      Não               mais de R… Sim      80     1.6 
##  9 Feminino    30 Centro-oeste Não               entre R$ … Sim      79.8   1.69
## 10 Feminino    30 Sudeste      Sim               entre R$ … Sim      79.8   1.6 
## # … with 1,634 more rows, and abbreviated variable names ¹​Renda_familiar,
## #   ²​Alteracao_Pandemia
# Filtrando pessoas da região norte e com idade > 40
# Observação: quando se trata de vetores utiliza-se o & para "e" e o | para "ou"
sub_dados = dados %>% filter(Regiao == "Norte" & Idade > 40)
sub_dados
## # A tibble: 105 × 8
##    Genero    Idade Regiao Isolamento_Social Renda_familiar  Alter…¹  Peso Altura
##    <chr>     <dbl> <chr>  <chr>             <chr>           <chr>   <dbl>  <dbl>
##  1 Feminino     47 Norte  Não               mais de R$ 8.6… Não      51.2   1.57
##  2 Masculino    44 Norte  Não               mais de R$ 8.6… Sim     136.    1.77
##  3 Masculino    55 Norte  Não               mais de R$ 8.6… Não     120     1.87
##  4 Masculino    46 Norte  Sim               entre R$ 1.255… Sim     105     1.75
##  5 Feminino     54 Norte  Sim               mais de R$ 8.6… Sim     104     1.66
##  6 Masculino    62 Norte  Sim               mais de R$ 8.6… Sim     103     1.75
##  7 Masculino    49 Norte  Não               mais de R$ 8.6… Sim     100     1.7 
##  8 Feminino     55 Norte  Sim               mais de R$ 8.6… Não     100     1.76
##  9 Masculino    43 Norte  Não               mais de R$ 8.6… Sim      98.8   1.82
## 10 Masculino    41 Norte  Sim               entre R$ 1.255… Sim      98     1.75
## # … with 95 more rows, and abbreviated variable name ¹​Alteracao_Pandemia

9.4 Função mutate

Função que permite criar/modificar variáveis.

# Criando a variável IMC
sub_dados = dados %>% mutate(IMC=Peso/Altura^2)
sub_dados
## # A tibble: 2,210 × 9
##    Genero    Idade Regiao       Isolamento_…¹ Renda…² Alter…³  Peso Altura   IMC
##    <chr>     <dbl> <chr>        <chr>         <chr>   <chr>   <dbl>  <dbl> <dbl>
##  1 Masculino    38 Sul          Não           entre … Não      99     1.7   34.3
##  2 Masculino    28 Sudeste      Sim           mais d… Sim      95.6   1.95  25.1
##  3 Feminino     24 Sudeste      Não           até R$… Sim      91     1.71  31.1
##  4 Feminino     26 Norte        Não           até R$… Sim      90.5   1.68  32.1
##  5 Feminino     56 Sudeste      Não           entre … Não      87.8   1.68  31.1
##  6 Masculino    22 Centro-oeste Não           entre … Não      86.2   1.85  25.2
##  7 Feminino     43 Centro-oeste Sim           entre … Não      85     1.67  30.5
##  8 Feminino     69 Sudeste      Sim           entre … Não      83.2   1.7   28.8
##  9 Feminino     34 Norte        Não           entre … Sim      80.9   1.59  32.0
## 10 Feminino     29 Centro-oeste Sim           entre … Sim      80.6   1.68  28.6
## # … with 2,200 more rows, and abbreviated variable names ¹​Isolamento_Social,
## #   ²​Renda_familiar, ³​Alteracao_Pandemia

9.5 Função transmute

Função que permite criar/modificar variáveis, mas devolve apenas as variáveis criadas/modificadas.

# Criando a variável IMC
sub_dados = dados %>% transmute(IMC=Peso/Altura^2)
sub_dados
## # A tibble: 2,210 × 1
##      IMC
##    <dbl>
##  1  34.3
##  2  25.1
##  3  31.1
##  4  32.1
##  5  31.1
##  6  25.2
##  7  30.5
##  8  28.8
##  9  32.0
## 10  28.6
## # … with 2,200 more rows

9.6 Combinação de Funções

Suponha que eu esteja interessado em uma base de dados em que sejam estudadas apenas as mulheres com mais de 40 anos. Adicionalmente, preciso do IMC delas. Para fechar, é de interesse o estudo apenas das variáveis Alteracao_Pandemia, IMC e Idade

Nesse caso, podemos combinar diversas funções do dplyr com o pipe %>%:

# Combinando funções
sub_dados = dados %>% filter(Genero == "Feminino" & Idade > 40) %>% 
  mutate(IMC = Peso/Altura^2) %>% 
  select(Alteracao_Pandemia, IMC, Idade)
sub_dados
## # A tibble: 481 × 3
##    Alteracao_Pandemia   IMC Idade
##    <chr>              <dbl> <dbl>
##  1 Não                 31.1    56
##  2 Não                 30.5    43
##  3 Não                 28.8    69
##  4 Sim                 31.2    63
##  5 Sim                 29.1    48
##  6 Sim                 25.6    51
##  7 Não                 27.0    73
##  8 Sim                 24.3    56
##  9 Não                 20.8    47
## 10 Sim                 41.5    48
## # … with 471 more rows

10 Exercícios

Considere a base de dados de uma pesquisa com alunos dos cursos de matemática do ensino médio. Ele contém muitas informações sociais, de gênero e de estudo interessantes sobre os alunos. As variáveis observadas foram:

  • school - Escola do estudante (binária: ‘GP’ - Gabriel Pereira ou ‘MS’ - Mousinho da Silveira)
  • sex - Sexo do estudante (binária: ‘F’ - feminino ou ‘M’ - masculino)
  • age - Idade do estudante (numérica: de 15 a 22)
  • address - Tipo de endereço do estudante (binário: ‘U’ - urbano or ‘R’ - rural)
  • studytime - Tempo de estudo semanal (numérica: 1 - <2 horas, 2 - 2 a 5 horas, 3 - 5 a 10 horas, ou 4 - >10 horas)
  • romantic - relacionamento amoroso (binária: yes ou no)
  • goout - sair com os amigos (numérica: de 1 - muito baixo a 5 - muito alto)
  • Dalc - consumo de álcool diário (numérica: de 1 - muito baixo a 5 - muito alto)
  • Walc - consumo de álcool ao fim de semana (numérica: de 1 - muito baixo a 5 - muito alto)
  • health - status atual de saúde (numérica: de 1 - muito ruim a 5 - muito bom)
  • G1 - Nota do primeiro período (numérica de 0 a 20)
  • G2 - Nota do segundo período (numérica: de 0 a 20)

1- Leia a base de dados e guarde em um objeto chamado DadosA

2- Execute o código DadosA<-DadosA%>%arrange(age) e examine o objeto DadosA. O que aconteceu?

3- Execute o código DadosA<-DadosA%>%arrange(desc(age)) e examine o objeto DadosA. O que aconteceu?

4- Exercite os comandos do dplyr:

  • Renomeie a variável studytime para study_time e guarde no objeto DadosA1
  • Renomeie a variável health para saude e guarde no objeto DadosA2
  • Selecione as variáveis romantic, Walc, Dalc e G2 e guarde no objeto DadosA3
  • Selecione todas as variáveis exceto goout e guarde no objeto DadosA4
  • Filtre os estudantes com notas G1 superiories a 16 e guarde no objeto DadosA5
  • Filtre os estudantes com romantic = yes e age maior que 20 e guarde no objeto DadosA6
  • Crie a variável GF, que é equivalente a \(G1*0.6\) + \(G2*0.4\) e guarde no objeto DadosA7

5- Crie uma sequência de comandos para que, a partir do objeto DadosA, filtre os estudantes que possuem um consumo muito alto de álcool tanto diariamente como apenas no fim de semana, Crie a variável GF, que é equivalente a \(G1*0.6\) + \(G2*0.4\) e selecione as variáveis school, sex, study_time, age, romantic e GF. Guarde os dados finais em um objeto chamado DadosF.