Importar datos del SPSS al R

Existen diversas alternativas para importar bases de datos del SPSS al R. En este instructivo veremos dos de ella. Antes de proceder necesitaremos:

Alternativa A: Comando read_sav

El comando read_sav se encuentra en el paquete haven, para ejecutarlo se usa la siguiente sintaxis:

library(haven)
enaho17_m1_A <- as.data.frame(read_sav("Enaho01-2017-100.sav"))

Alternativa B: Comando read.spss

El comando read.spss se encuentra en el paquete foreign, para ejecutarlo se procede de la siguiente manera:

library(foreign)
enaho17_m1_B <- read.spss("Enaho01-2017-100.sav", to.data.frame = TRUE)

Verificar los nombres de las variables en una Base de Datos

Independientemente de la manera en cómo hayamos importado los datos del SPSS al R, podemos ver qué variables contiene nuestra base de datos usando el comando names (por razones de espacio mostramos sólo las primeras 50 variables). Para conocer el detalle de las variables, debemos utilizar el diccionario de datos correspondiente.

names(enaho17_m1_A)
##  [1] "AÑO"       "MES"       "NCONGLOME" "CONGLOME"  "VIVIENDA" 
##  [6] "HOGAR"     "UBIGEO"    "DOMINIO"   "ESTRATO"   "PERIODO"  
## [11] "TIPENC"    "FECENT"    "RESULT"    "PANEL"     "P22"      
## [16] "P23"       "P101"      "P102"      "P103"      "P103A"    
## [21] "P104"      "P104A"     "P104B1"    "P104B2"    "P105A"    
## [26] "P105B"     "P106"      "P106A"     "P106B"     "P107B1"   
## [31] "P107C11"   "P107C12"   "P107C13"   "P107C14"   "P107C16"  
## [36] "P107C17"   "P107C18"   "P107C19"   "P107C110"  "P107D1"   
## [41] "P107B2"    "P107C21"   "P107C22"   "P107C23"   "P107C24"  
## [46] "P107C26"   "P107C27"   "P107C28"   "P107C29"   "P107C210"

Comparación entre read_sav y read.spss

En ambos casos se crea un data frame con 43545 observaciones (en ese caso 1 observación = 1 hogar) y 314 variables. La principal diferencia entre ambos procedimientos es que la base de datos importada con read.spss convierte las variables categóricas en factores, importando las etiquetas correspondientes de las variables; mientras que cuando se usa “read_sav”, en el caso de las variables categóricas se importan sólo los códigos de las categorías, los cuales se almacenan como si fueran valores numéricos. Ello puede verse comparando cómo ambos procedimientos de importación han almacenado la información de la variable “DOMINIO”:

table(enaho17_m1_A$DOMINIO)
## 
##    1    2    3    4    5    6    7    8 
## 5539 3811 2887 2897 7692 6458 8827 5434
table(enaho17_m1_B$DOMINIO)
## 
##        Costa Norte       Costa Centro          Costa Sur 
##               5539               3811               2887 
##       Sierra Norte      Sierra Centro         Sierra Sur 
##               2897               7692               6458 
##              Selva Lima Metropolitana 
##               8827               5434

A primera vista,importar la base de datos convirtiendo directamente las variables categóricas en factores con etiquetas parece ser más práctico, sin embargo si vamos a realizar algunos procedimientos que impliquen seleccionar casos o recodificar variables, es más fácil trabajar con códigos numéricos que con etiquetas de texto. Por ejemplo si queremos crear una variable que diferencia los dominios de la sierra del resto, resulta más fácil hacerlo de esta forma:

library(car)

enaho17_m1_A$sierra <- recode(enaho17_m1_A$DOMINIO, "4:6 = 1; else =0")

Que usar este código:

enaho17_m1_B$sierra <- recode(enaho17_m1_B$DOMINIO, "'Sierra Norte' = 1; 
                        'Sierra Centro' = 1; 'Sierra Sur'= 1; else =0")

La desventaja de usar la base de datos que contiene sólo códigos numéricos es que requerimos conocer o tener a la mano el libro de códigos para “leer” los datos. Sin embargo, resulta más conveniente y rápido para varios procedimientos de acondiciomiento y manejo de los datos. Luego, al momento de preparar los resultados finales para la presentación, se puede etiquetar las categorías para elaborar los cuadros o gráficos finales de presentación.

Grabar una base de datos en formato R

Una vez importados los datos, podemos grabar la base de datos en formato R. En este formato, las bases de datos tienen la extensión *.rda ó *.Rdata:

save(enaho17_m1_A, file = "enaho_17_m1_A.rda")

De esta forma, la siguiente vez que queramos trabajar con los datos, cargamos directamente la base de datos en formato R de la siguiente manera:

load("enaho_17_m1_A.rda")

Bases de datos en otros formatos

Formato STATA

El INEI también nos permite descargar las bases de datos en formato STATA. El R también puede importar este tipo de formato. Si usted descarga el archivo del modulo 1 de la ENAHO 2017 en formato STATA puede usar la siguiente sintaxis para importarlo al R:

library(haven)
enaho2017_m1 <- as.data.frame(read_dta("Enaho01-2017-100.dta"))

Formato Excel y CSV

Es posible importar bases de datos almacenadas en formato Excel. Para ello deben considerarse los siguientes requisitos:

  • No se pueden importar libros Excel completos, sólo hojas de cálculo individuales
  • Los datos deben tener un formato de matriz: cada fila debe corresponder a un registro u observación, cada columna a una variable. La primera fila de la hoja debe contener los nombres de las variables.

Una vez cumplidas esas condiciones, lo más conveniente es grabar la hoja Excel con la base de datos en un archivo de formato CVS delimitado por comas (usando la opción “grabar como” del Excel), este archivo tendrá la extensión *.csv.

En el siguiente enlace puede desargar una base de datos en formato CSV que contiene indicadores de género para varios países del mundo en el 2005: genero2005.csv. El libro de códigos correspondiente se puede ver en este enlace: Codigos genero.

Una vez ubicada la base de datos en su directorio de trabajo, puede importarla de la siguiente manera. El resultado es una base de datos con 11 variables para 75 observaciones o países:

genero2005 <- read.csv("genero2005.csv")

names(genero2005)
##  [1] "Pais"       "mort.mat"   "gasto.sal"  "parto.inst" "alfa.muj"  
##  [6] "parl.muj"   "dgen.ing"   "dgen.sup"   "muj.pea"    "voto.muj"  
## [11] "conv.muj"

Ejercicios