alt text

GET00130 - Métodos Computacionais para Estatística II

Jony Arrais Pinto Junior

Conteúdo da aula

  • Tidyverse;
  • Pipe;
  • Importando arquivos (.txt, .csv, .xlsx, .sav, .sas, etc);
  • Exportando arquivos;
  • Arquivos RDS.

Tidyverse

Nós (estatísticos/cientista de dados) precisamos falar sobre o tidyverse!

O tidyverse é um conjunto de pacotes do R que auxiliam o estatístico/cientista de dados na execução de diversas tarefas corriqueiras de forma eficiente e unificada. Vamos inicialmente pensar em eficiência no sentido da velocidade de solucionar o problema e não da velocidade de execução de algoritmos. Os pacotes pertencentes a este universo compartilham de uma filosofia, gramática e estrutura de dados, o que permite uma maior integração entre eles.

alt text

Se você é novo no tidyverse, o melhor lugar para você aprender a filosofia completa e como tudo se encaixa é o livro R for data science de autoria do Garret Grolemund e do Haddley Wickham.

O tidyverse é considerado um “universo” a parte do R, principalmente porque todas suas ferramentas possuem formas de uso consistentes e funcionam muito bem em conjunto.

Os princípios do tidyverse são:

1 - Eficiência algorítmica vs eficiência de trabalho.

Estamos dizendo que o tempo que o estatísco/cientista de dados gasta pensando em como realizar uma operação é mais importante do que o tempo que o computador gasta para realizar um cálculo.

2 - Tidy data.

É um princípio para arrumação da base de dados que resolve, usualmente, mais de 80% dos problemas reais. O objetivo na arrumação dos dados é extrair e transformar uma base de dados até que ela esteja em formato tidy. Uma base de dados é considerada “tidy” se cada observação é uma linha da base, cada variável é uma coluna da base e cada dado está numa célula da base.

3 - Utilização do operador |> (pipe)

Operador que revolucionou/facilitou a lógica de programar no R.

4 - Aparato mnemônico.

Pacotes baseados em teoria e API consistentes.

5 - Minimalidade e funções puras.

Funções sem efeitos colaterais. Interagem com o mundo por meio de inputs e outputs. Encaixa perfeitamente com o princípio do pipe.

6 - workflow para ciência de dados

alt text

1 - Pipe (Ctrl + Shift + m)

Pipes são ferramentas extremamente poderosas para clarear (decodificar) uma sequência de múltiplas operações.

Podemos apontar o operador pipe como uma das grandes revoluções dos último tempos no R, pois torna a leitura de uma sequência de códigos muito mais lógica, fácil e compreensível.

O |> é um operador nativo do R, que encontraremos disponível a partir da versão 4.1.

Basicamente, o operador |> usa o resultado do seu lado esquerdo como primeiro argumento da função do lado direito. Só isso!!!

No código abaixo, para termos acesso ao |> vamos carregar o pacote tidyverse (que carrega diversos pacotes).

#Criando um vetor x
x = c(2, 5, 7, 1, 8, 3)

#Calculando a média dos elementos de x com 2 casas decimais
x |> 
  mean() |> 
  round(digits = 2)
[1] 4.33

Com o código descrito acima, enviamos o objeto x como o primeiro argumento da função mean e, em seguida, enviamos o resultado da expressão mean(x) como o primeiro argumento da função round, que diferentemente da função mean, necessita de dois argumentos, o valor a ser arredondado e o número de casas decimais, no caso digits = 2.

Mas qual foi o ganho? Se escrevermos os comandos na forma usual temos:

#Calculando a media de x com 2 casas decimais na forma usual
round(x = mean(x), digits = 2)
[1] 4.33

Aparentemente, o ganho não foi grande. Agora pense que precisamos executar 10 funções aninhadas! O uso do |> vai permitir transformar um código confuso e difícil em algo simples e intuitivo.

Retiramos o exemplo abaixo do site curso-r, e ele se refere a seguinte situação problema: “vamos imaginar que precisamos escrever uma receita de um bolo usando o R, e cada passo da receita é uma função”:

#Receita do bolo
esfrie(asse(coloque(bata(acrescente(recipiente(rep("farinha", 2), "água", "fermento", "leite", "óleo"), "farinha", ate = "macio"), duracao = "3min"), lugar = "forma", tipo = "grande", untada = TRUE), duracao = "50min"), "geladeira", "20min")

Entenderam????? Imaginamos que não!

|> no código:

#Receita do bolo com |>
recipiente(rep("farinha", 2), "água", "fermento", "leite", "óleo") |>
  acrescente("farinha", ate = "macio") |>
  bata(duracao = "3min") |>
  coloque(lugar = "forma", tipo = "grande", untada = T) |>
  asse(duracao = "50min") |>
  esfrie("geladeira", "20min")

Agora o código realmente parece uma receita de bolo, certo?

Já estão apaixonados pelo tidyverse?

Para você ativar o atalho Ctrl + Shift + m no Windows ou Cmd + Shift + m no Mac, precisamos ativar esta opção. Basta irmos em Tools > Global Options > Code e ativar a caixa como especificado abaixo (é preciso ter uma versão igual ou superior a 4.1 do R):

Aqueles que forem usuários do %>% do pacote magrittr, puderam perceber que existe grande semelhança entre o operador pipe nativo da linguagem com o pipe do pacote. Existem sim, algumas diferenças que não são tão importantes neste momento. Para aqueles que estiverem conhecendo o operador pipe pela primeira vez, sugiro fortemente o uso do pipe nativo |>.

2 - Importando dados para o R

O primeiro passo para importarmos um arquivo para o R é fazer com que o mesmo “enxergue” a sua pasta de trabalho.

Como perguntar qual a pasta que o R está “enxergando” no momento?

#Descobrindo qual a pasta de trabalho que o R está "enxergando" neste momento
getwd()

Caso não seja a pasta onde localiza-se o seu arquivo, podemos mudar essa pasta com a função setwd.

#Modificando a pasta de trabalho que o R está "enxergando" neste momento
setwd("PASSAR AQUI O CAMINHO DA SUA PASTA SEMPRE ENTRE ASPAS")

O caminho deve estar SEMPRE entre aspas e as barras devem ser invertidas (caso deseje usar a barra sem ser invertida é preciso duplicá-las).

A seguir serão apresentados alguns pacotes para a importação de dados para o R.

2.1 - Pacote readr

alt text

Um pacote cujo objetivo é propiciar de modo rápido e amigável a importação de dados retangulares (como .txt, .csv, .tsv, .fwd).

As principais funções deste pacote para importação de dados são:

  • read_table2 - importa arquivos em que as colunas são separadas por espaços em branco. É equivalente a read.table, permite qualquer número de espaços entre colunas.
  • read_table - é similar a read_table2, porém é mais rigorosa, cada linha deve ter o mesmo cumprimento e cada campo está na mesma posição em todas as linhas.
  • read_csv - importa aquivos delimitados por vírgula.
  • read_csv2 - importa arquivos separados por semicolunas (comum em países que usam a “,” como separador decimal)
  • read_tsv - importa arquivos separados por tabs.
  • read_delim - importa arquivos com larguras fixas.

A seguir, vamos apresentar os principais argumentos da função read_delim:

  - file - o arquivo a ser importado;

  - delim - o caracter usado para separar as variáveis;

  - col_names - um argumento lógico indicando se o arquivo possui ou não os nomes das variáveis (default = TRUE);

  - na - qual a codificação usada para dado faltante (default = NA);

  - skip - número de linhas a serem puladas no momento da importação (default = 0);

  - locale - controla vários aspectos como decimal, enconding, entre outros.

Após especificarmos a pasta de trabalho, basta utilizarmos a função read_delim como a seguir.

#Importando o arquivo Base saude.txt e guardando no objeto base_saude
base_saude = read_delim(file = "Base saude.txt")
Rows: 200 Columns: 10
── Column specification ────────────────────────────────────────────────────────
Delimiter: "\t"
chr (2): Codigo, Datacol
dbl (6): Sexo, Idade, HIV, Escol, DST, Tipo

ℹ 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.
#Visualizando o objeto base_saude
base_saude
# A tibble: 200 × 10
   Codigo Datacol   Sexo Idade  Peso Estatura   HIV Escol   DST  Tipo
   <chr>  <chr>    <dbl> <dbl> <dbl>    <dbl> <dbl> <dbl> <dbl> <dbl>
 1 AB01   14/10/15     1    20   612       16     1     3     1     2
 2 AB02   09/02/16     0    30    60      155     0     5     0     9
 3 AB03   01/03/10     0    50    80      183     1     2     1     3
 4 AB04   04/05/13     0    43    83       19     1     9     1     2
 5 AB05   20/05/14     0    22   753      175     0     2     1     3
 6 AB06   30/01/11     1    15   702       17     1     6     0     9
 7 AB07   05/08/15     1    22    60      165     1     5     1     3
 8 AB08   08/12/13     1    25    62      155     0     1     0     2
 9 AB09   03/11/10     1    32    61      162     1     4     1     1
10 AB10   10/10/10     1    33    55      155     1     5     1     9
# … with 190 more rows

Ao usarmos as funções do pacote readr para importarmos arquivo, a primeira coisa que percebemos é que são apresentadas a forma como cada variável foi coletada. Ao pedirmos para visualizarmos o objeto, percebemos que ele é um tibble.

  • A importação foi realizada de maneira correta?

  • Avaliem a variável Peso e Estatura no arquivo original. O que tem de diferente dos valores apresentados na tela do R?

Suponham que o responsável pela digitação dos dados nos informou que ele utilizou o código 9 como dado faltante para todas as variáveis.

Isso significa que precisamos modificar alguns argumentos da função para que a mesma possa realizar a importação de forma adequada, considerando o 9 como dado faltante e a “,” como decimal.

#Visualizando os argumentos da função locale
args(locale)
function (date_names = "en", date_format = "%AD", time_format = "%AT", 
    decimal_mark = ".", grouping_mark = ",", tz = "UTC", encoding = "UTF-8", 
    asciify = FALSE) 
NULL
#Importando o arquivo Base saude.txt
base_saude = read_delim(file = "Base saude.txt", 
                         na = "9", 
                         locale = locale(decimal_mark = ","))
Rows: 200 Columns: 10
── Column specification ────────────────────────────────────────────────────────
Delimiter: "\t"
chr (2): Codigo, Datacol
dbl (8): Sexo, Idade, Peso, Estatura, HIV, Escol, DST, Tipo

ℹ 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.
#Visualizando o objeto base_saude
base_saude
# A tibble: 200 × 10
   Codigo Datacol   Sexo Idade  Peso Estatura   HIV Escol   DST  Tipo
   <chr>  <chr>    <dbl> <dbl> <dbl>    <dbl> <dbl> <dbl> <dbl> <dbl>
 1 AB01   14/10/15     1    20  61.2     1.6      1     3     1     2
 2 AB02   09/02/16     0    30  60       1.55     0     5     0    NA
 3 AB03   01/03/10     0    50  80       1.83     1     2     1     3
 4 AB04   04/05/13     0    43  83       1.9      1    NA     1     2
 5 AB05   20/05/14     0    22  75.3     1.75     0     2     1     3
 6 AB06   30/01/11     1    15  70.2     1.7      1     6     0    NA
 7 AB07   05/08/15     1    22  60       1.65     1     5     1     3
 8 AB08   08/12/13     1    25  62       1.55     0     1     0     2
 9 AB09   03/11/10     1    32  61       1.62     1     4     1     1
10 AB10   10/10/10     1    33  55       1.55     1     5     1    NA
# … with 190 more rows
#Obtendo medidas descritivas de todas as variáveis
summary(base_saude)
    Codigo            Datacol               Sexo          Idade      
 Length:200         Length:200         Min.   :0.00   Min.   :15.00  
 Class :character   Class :character   1st Qu.:0.00   1st Qu.:22.00  
 Mode  :character   Mode  :character   Median :1.00   Median :25.00  
                                       Mean   :0.55   Mean   :29.75  
                                       3rd Qu.:1.00   3rd Qu.:32.25  
                                       Max.   :1.00   Max.   :60.00  
                                                                     
      Peso          Estatura          HIV             Escol      
 Min.   :50.00   Min.   :1.500   Min.   :0.0000   Min.   :0.000  
 1st Qu.:61.00   1st Qu.:1.600   1st Qu.:0.0000   1st Qu.:1.750  
 Median :65.00   Median :1.650   Median :1.0000   Median :3.000  
 Mean   :67.36   Mean   :1.667   Mean   :0.6768   Mean   :3.228  
 3rd Qu.:72.00   3rd Qu.:1.700   3rd Qu.:1.0000   3rd Qu.:5.000  
 Max.   :83.00   Max.   :1.900   Max.   :1.0000   Max.   :6.000  
                                 NA's   :2        NA's   :20     
      DST              Tipo      
 Min.   :0.0000   Min.   :1.000  
 1st Qu.:0.0000   1st Qu.:1.000  
 Median :1.0000   Median :2.000  
 Mean   :0.5969   Mean   :2.034  
 3rd Qu.:1.0000   3rd Qu.:3.000  
 Max.   :1.0000   Max.   :3.000  
 NA's   :4        NA's   :82     
  • Qual o problema das medidas resumos apresentadas acima?
  • Avalie o arquivo Dicionário Base saude.
  • Percebemos que o r está tratando várias variáveis que são qualitativas como variáveis numéricas, pois tem calculado medidas resumos como média e quartis.
  • É preciso trasformar as variáveis em fatores, vamos fazer esta transformação seguindo o dicionário?
#Transformando a variável Sexo em um factor
base_saude$Sexo = factor(x = base_saude$Sexo,
                         labels = c("Feminino","Masculino"))

#Transformando a variável HIV em um factor
base_saude$HIV = factor(x = base_saude$HIV, 
                        labels = c("Não","Sim"))

#Transformando a variável Escolaridade em um ordered
base_saude$Escol = ordered(x = base_saude$Escol,
                           levels = c(0,1,2,3,4,5), 
                           labels = c("Analfabeto","Fundamental Incompleto","Fundamental Completo","Medio Incompleto", "Medio Completo","Superior"))

#Transformando a variável DST em um factor
base_saude$DST = factor(x = base_saude$DST, 
                        labels = c("Não","Sim"))

#Transformando a variável Tipo de DST em um factor
base_saude$Tipo = factor(x = base_saude$Tipo, 
                         labels = c("Sifilis","Hepatite","Outros"))

#Transformando a variável Codigo em um fator
base_saude$Codigo = factor(x = base_saude$Codigo)


#Visualizando a base tratada
base_saude
# A tibble: 200 x 10
   Codigo Datacol  Sexo    Idade  Peso Estatura HIV   Escol         DST   Tipo  
   <fct>  <chr>    <fct>   <dbl> <dbl>    <dbl> <fct> <ord>         <fct> <fct> 
 1 AB01   14/10/15 Mascul…    20  61.2     1.6  Sim   Medio Incomp… Sim   Hepat…
 2 AB02   09/02/16 Femini…    30  60       1.55 Não   Superior      Não   <NA>  
 3 AB03   01/03/10 Femini…    50  80       1.83 Sim   Fundamental … Sim   Outros
 4 AB04   04/05/13 Femini…    43  83       1.9  Sim   <NA>          Sim   Hepat…
 5 AB05   20/05/14 Femini…    22  75.3     1.75 Não   Fundamental … Sim   Outros
 6 AB06   30/01/11 Mascul…    15  70.2     1.7  Sim   <NA>          Não   <NA>  
 7 AB07   05/08/15 Mascul…    22  60       1.65 Sim   Superior      Sim   Outros
 8 AB08   08/12/13 Mascul…    25  62       1.55 Não   Fundamental … Não   Hepat…
 9 AB09   03/11/10 Mascul…    32  61       1.62 Sim   Medio Comple… Sim   Sifil…
10 AB10   10/10/10 Mascul…    33  55       1.55 Sim   Superior      Sim   <NA>  
# … with 190 more rows
#Calculando medidas descritivas
summary(base_saude)
     Codigo      Datacol                 Sexo         Idade      
 AB01   :  1   Length:200         Feminino : 90   Min.   :15.00  
 AB02   :  1   Class :character   Masculino:110   1st Qu.:22.00  
 AB03   :  1   Mode  :character                   Median :25.00  
 AB04   :  1                                      Mean   :29.75  
 AB05   :  1                                      3rd Qu.:32.25  
 AB06   :  1                                      Max.   :60.00  
 (Other):194                                                     
      Peso          Estatura       HIV                         Escol   
 Min.   :50.00   Min.   :1.500   Não : 64   Analfabeto            :13  
 1st Qu.:61.00   1st Qu.:1.600   Sim :134   Fundamental Incompleto:32  
 Median :65.00   Median :1.650   NA's:  2   Fundamental Completo  :34  
 Mean   :67.36   Mean   :1.667              Medio Incompleto      :13  
 3rd Qu.:72.00   3rd Qu.:1.700              Medio Completo        :30  
 Max.   :83.00   Max.   :1.900              Superior              :26  
                                            NA's                  :52  
   DST            Tipo   
 Não : 79   Sifilis :35  
 Sim :117   Hepatite:44  
 NA's:  4   Outros  :39  
            NA's    :82  
                         
                         
                         
  • Percebam que ainda falta realizar um tratamento adequado para a variável Datacol, mas só iremos discutir este tratamento quando falarmos do pacote lubridate.

Algumas funções do pacote readr permitem que definamos o tipo da variável na sua importação. Vejam que na importação anterior, a função definiu de acordo com uma avaliação dos valores que a variável assumir. Suponha que o nosso interesse seja que a variável Sexo seja um character que assume os valores 0 e 1. Podemos fazer essa definição na importação da base usando o argumento col_types.

#Importando o arquivo Base saude.txt
base_saude2 = read_delim(file = "Base saude.txt", 
                         na = "9", 
                         locale = locale(decimal_mark = ","),
                         col_types = cols(Sexo = col_character()))

#Visualizando o objeto base_saude2
base_saude2
# A tibble: 200 × 10
   Codigo Datacol  Sexo  Idade  Peso Estatura   HIV Escol   DST  Tipo
   <chr>  <chr>    <chr> <dbl> <dbl>    <dbl> <dbl> <dbl> <dbl> <dbl>
 1 AB01   14/10/15 1        20  61.2     1.6      1     3     1     2
 2 AB02   09/02/16 0        30  60       1.55     0     5     0    NA
 3 AB03   01/03/10 0        50  80       1.83     1     2     1     3
 4 AB04   04/05/13 0        43  83       1.9      1    NA     1     2
 5 AB05   20/05/14 0        22  75.3     1.75     0     2     1     3
 6 AB06   30/01/11 1        15  70.2     1.7      1     6     0    NA
 7 AB07   05/08/15 1        22  60       1.65     1     5     1     3
 8 AB08   08/12/13 1        25  62       1.55     0     1     0     2
 9 AB09   03/11/10 1        32  61       1.62     1     4     1     1
10 AB10   10/10/10 1        33  55       1.55     1     5     1    NA
# … with 190 more rows

Atividade: Agora importem o arquivo Base saude modificada.txt (avaliem as características que o objeto possui e assuma que o 9 é o código de dado faltante) e guardem em um objeto chamado base_saude3.

#Visualizando o objeto base_saude3
base_saude3
# A tibble: 7 × 10
  Codigo DaTaCole  Sexo Idade  Peso EsTaTura   HIV Escol   DST  Tipo
  <chr>  <chr>    <dbl> <dbl> <dbl>    <dbl> <dbl> <dbl> <dbl> <dbl>
1 AB01   14/10/15     1    20  61.2     1.6      1     3     1     2
2 AB02   09/02/16     0    30  60       1.55     0     5     0    NA
3 AB03   01/03/10     0    50  80       1.83     1     2     1     3
4 AB04   04/05/13     0    43  83       1.9      1    NA     1     2
5 AB05   20/05/14     0    22  75.3     1.75     0     2     1     3
6 AB06   30/01/11     1    15  70.2     1.7      1     6     0    NA
7 AB07   05/08/15     1    22  60       1.65     1     5     1     3

Se o nosso interesse é importar arquivos com extensão .csv, podemos usar a função read_delim, mas existem opções melhores, pois não nos preocuparemos em definir o delimitador.

As funções read_csv e read_csv2 leem dados em arquivos .csv.

CSV (comma separeted values)

Principais argumentos da função read_csv2:

  - file - o arquivo a ser importado;

  - col_names - um argumento lógico indicando se o arquivo possui ou não os nomes das variáveis (default = TRUE);

  - na - qual a codificação usada para dado faltante (default =c("", NA));

  - skip - número de linhas a serem puladas no momento da importação (default = 0);

  - locale - controla vários aspectos como decimal, enconding, entre outros.

#Fazendo a leitura do arquivo Base saude.csv
base_saude4 = read_csv2(file = "Base saude.csv")
ℹ Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
Rows: 200 Columns: 10
── Column specification ────────────────────────────────────────────────────────
Delimiter: ";"
chr (2): Codigo, Datacol
dbl (8): Sexo, Idade, Peso, Estatura, HIV, Escol, DST, Tipo

ℹ 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.
base_saude4
# A tibble: 200 × 10
   Codigo Datacol   Sexo Idade  Peso Estatura   HIV Escol   DST  Tipo
   <chr>  <chr>    <dbl> <dbl> <dbl>    <dbl> <dbl> <dbl> <dbl> <dbl>
 1 AB01   14/10/15     1    20  61.2     1.6      1     3     1     2
 2 AB02   09/02/16     0    30  60       1.55     0     5     0     9
 3 AB03   01/03/10     0    50  80       1.83     1     2     1     3
 4 AB04   04/05/13     0    43  83       1.9      1     9     1     2
 5 AB05   20/05/14     0    22  75.3     1.75     0     2     1     3
 6 AB06   30/01/11     1    15  70.2     1.7      1     6     0     9
 7 AB07   05/08/15     1    22  60       1.65     1     5     1     3
 8 AB08   08/12/13     1    25  62       1.55     0     1     0     2
 9 AB09   03/11/10     1    32  61       1.62     1     4     1     1
10 AB10   10/10/10     1    33  55       1.55     1     5     1     9
# … with 190 more rows

As diferenças entre as duas funções para importação de arquivos .csv são o separador e o decimal. Quando forem importar um arquivo de extensão .csv, testem uma das funções e caso a exportação não esteja ocorrendo de forma correta, tente a outra função.

2.2 - Pacote readxl

alt text

A função read_excel importa dados em arquivos .xls e .xlsx.

Principais argumentos da função read_excel:

  - path - o arquivo a ser importado;

  - sheet - a planilha a ser importada;

  - col_names - um argumento lógico indicando se o arquivo possui ou não os nomes das variáveis (default = TRUE);

  - skip - número de linhas a serem puladas no momento da importação (default = 0);

  - na - qual a codificação usada para dado faltante (default = NA).

# Carregando o pacote readxl
library(readxl)

#Fazendo a leitura do arquivo Base saude.xlsx
base_saude5 = read_excel(path = "Base saude.xlsx", 
                         sheet = 1)
base_saude5
# A tibble: 200 × 10
   Codigo Datacol              Sexo Idade  Peso Estatura   HIV Escol   DST  Tipo
   <chr>  <dttm>              <dbl> <dbl> <dbl>    <dbl> <dbl> <dbl> <dbl> <dbl>
 1 AB01   2015-10-14 00:00:00     1    20  61.2     1.6      1     3     1     2
 2 AB02   2016-02-09 00:00:00     0    30  60       1.55     0     5     0     9
 3 AB03   2010-03-01 00:00:00     0    50  80       1.83     1     2     1     3
 4 AB04   2013-05-04 00:00:00     0    43  83       1.9      1     9     1     2
 5 AB05   2014-05-20 00:00:00     0    22  75.3     1.75     0     2     1     3
 6 AB06   2011-01-30 00:00:00     1    15  70.2     1.7      1     6     0     9
 7 AB07   2015-08-05 00:00:00     1    22  60       1.65     1     5     1     3
 8 AB08   2013-12-08 00:00:00     1    25  62       1.55     0     1     0     2
 9 AB09   2010-11-03 00:00:00     1    32  61       1.62     1     4     1     1
10 AB10   2010-10-10 00:00:00     1    33  55       1.55     1     5     1     9
# … with 190 more rows

2.3 - Pacote haven

alt text

É possível ler dados diretamente de outros formatos que não seja texto (ASCII). Isto em geral é mais eficiente e requer menos memória do que converter para formato texto. Há funções para importar dados diretamente do SAS, SPSS e Stata.

A seguir serão listadas algumas destas funções

  • read_sav para arquivos do SPSS;
  • read_stata para arquivos do Stata;
  • read_sas para arquivos do SAS;
# Carregando o pacote haven
library(haven)

#Fazendo a leitura de um arquivo do SPSS
base_spss = read_sav(file = "Dados.sav")

#Visualizando o arquivo base_spss
base_spss
# A tibble: 35 × 2
          Genero  Nota
       <dbl+lbl> <dbl>
 1 1 [Masculino]     6
 2 2 [Feminino]      8
 3 2 [Feminino]      7
 4 2 [Feminino]      7
 5 2 [Feminino]      8
 6 2 [Feminino]      8
 7 2 [Feminino]      8
 8 2 [Feminino]      8
 9 2 [Feminino]      6
10 2 [Feminino]      5
# … with 25 more rows
#Visualizando a variável Genero
base_spss$Genero
<labelled<double>[35]>: Genero dos pacientes
 [1] 1 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2

Labels:
 value     label
     1 Masculino
     2  Feminino

3 - Exportando dados do R

Após realizar modificações na base de dados, podemos salvar a base modificada no disco rígido do computador. Para isso, temos diversas opções de função, dependendo da extensão que desejarmos que o nosso arquivo tenha:

Principais argumentos da família de funções write_:

  - x - o arquivo a ser exportado;

  - path - nome com o qual o arquivo será salvo (não esquecer a extensão .xxx);

#Exportando o arquivo em .csv
write_excel_csv2(x = base_saude,
                 file = "Base saude alterada.csv")

#Exportando o arquivo em .txt
write_delim(x = base_saude,
            file = "Base modificada.txt")

#Exportando o arquivo em .sav
write_sav(data = base_saude,
            path = "Base modificada.sav")

4 - Extensão RDS

Atividade: Importem o arquivo Escolhas.csv e salvem em um arquivo chamado base_escolha!

#Visualizando a base Escolha
base_escolha
# A tibble: 352,020 × 7
   CODIGO   NU_SEQ_ESCOLHA DS_ESCOLHA CO_COMPONENTE CO_OPCAO_1 CO_OPCAO_2
   <chr>             <dbl>      <dbl>         <dbl> <chr>      <chr>     
 1 21006458            181          1             4 25205COL04 25205COL04
 2 21006458            181          1             6 25207COL06 25207COL06
 3 21006458            181          1             5 25206COL05 25206COL05
 4 21006458            181          1            17 32183L1729 32183L1729
 5 29301076            181          1            38 25229COL38 25229COL38
 6 29301076            181          1            32 25225COL32 25225COL32
 7 29301076            181          1             1 25230COL01 25230COL01
 8 29301076            181          1             2 25231COL02 25231COL02
 9 29301076            181          1             4 25396COL04 25396COL04
10 29301076            181          1             6 25309COL06 25309COL06
# … with 352,010 more rows, and 1 more variable: CO_OPCAO_3 <chr>

Ao salvarmos o arquivo como uma extensão .rds, ele cria uma versão serializada do conjunto de dados e, em seguida, salva-o com uma compressão, o que diminui o tamanho e o tempo necessário para a leitura do mesmo.

Principais argumentos da função write_rds:

  - x - o arquivo a ser exportado;

  - path - nome com o qual o arquivo será salvo (não esquecer a extensão .rds);

  - compress - escolher o tipo de compressão a ser aplicada (default = none);

#Salvando a base Escolhas
write_rds(x = base_escolha,
          file = "Escolhas.rds",
          compress = "gz")

#Importando um arquivo .rds
base.rds = read_rds(file = "Escolhas.rds")

base.rds
# A tibble: 352,020 × 7
   CODIGO   NU_SEQ_ESCOLHA DS_ESCOLHA CO_COMPONENTE CO_OPCAO_1 CO_OPCAO_2
   <chr>             <dbl>      <dbl>         <dbl> <chr>      <chr>     
 1 21006458            181          1             4 25205COL04 25205COL04
 2 21006458            181          1             6 25207COL06 25207COL06
 3 21006458            181          1             5 25206COL05 25206COL05
 4 21006458            181          1            17 32183L1729 32183L1729
 5 29301076            181          1            38 25229COL38 25229COL38
 6 29301076            181          1            32 25225COL32 25225COL32
 7 29301076            181          1             1 25230COL01 25230COL01
 8 29301076            181          1             2 25231COL02 25231COL02
 9 29301076            181          1             4 25396COL04 25396COL04
10 29301076            181          1             6 25309COL06 25309COL06
# … with 352,010 more rows, and 1 more variable: CO_OPCAO_3 <chr>