5.4 haven

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 e é um wrapper da biblioteca ReadStat, escrita em C.

library(haven)

imdb_sas <- read_sas("assets/data/imdb.sas7bdat")
imdb_spss <- read_spss("assets/data/imdb.sav")
imdb_dta <- read_dta("assets/data/imdb.dta")

É possível salvar ou escrever bases em SAS e STATA com as funções write_sas e write_dta.

write_dta(mtcars, 'assets/data/mtcars.dta')

Quando importamos arquivos gerados pelo SAS, SPSS ou STATA para o R, os rótulos de uma variável podem não ser importados de forma correta. O pacote haven tem uma solução para este problema.

x <- labelled(c(1,1,2,3,2,2,1,2), c(Ruim = 1, Bom = 2, Otimo = 3))

labelled() adiciona rótulos à valores de uma variável. Para verificar quais são estes rótulos, podemos usar a função print_labels().

print_labels(x)
## 
## Labels:
##  value label
##      1  Ruim
##      2   Bom
##      3 Otimo

Existe uma função similar a labelled(), exclusiva para o SPSS, que além de rotular as variáveis, também define quais símbolos representam valores faltantes, dado que em SPSS pode haver mais de um tipo de missing.

x1 <- labelled_spss(c(1,3,0,2,2,1,0,2,4), c(Ruim = 1,Bom = 2, Otimo = 3), na_values = c(0,4))
    
is.na(x1)
## [1] FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE

Agora que já definimos os missings “especiais”, podemos transformá-los no missing padrão do R, representado pelo símbolo NA.

x1 <- zap_missing(x1)
x1
## [1]  1  3 NA  2  2  1 NA  2 NA
## attr(,"labels")
##  Ruim   Bom Otimo 
##     1     2     3 
## attr(,"class")
## [1] "haven_labelled"

Existem outras funções zap_ interessantes no pacote.

Após rotular os valores do vetor, podemos convertê-los, por exemplo, em fator. Para isso, usamos uma função do pacote haven. A função base as.factor() também poderia ser usada, mas quando a usamos, os rótulos não são considerados.

x_base <- base::as.factor(x)
levels(x_base)
## [1] "1" "2" "3"
x_factor <- haven::as_factor(x)
levels(x_factor)
## [1] "Ruim"  "Bom"   "Otimo"

Curso-R