rm(list=ls()) #Limpiar entorno de trabajo
setwd("/home/daniel/Dropbox/U CENTRAL/02 2020/02 Segundo semestre 2020/Taller de análisis de datos sociales en R/Clases/02 sesion") #Escribir el directorio en que va a trabajar
#Si su pc no tiene instalado los paquetes, primero ejecutar:
#install.packages("foreign")
#install.packages("dplyr")
#install.packages("readxl")
library(foreign) #Cargar paquete de importación y exportación de datos
library(dplyr) #Cargar paquete de administración de bases de datos
library(readxl) #Cargar paquete de importación y exportación datos xls

Abrir y guardar bases de datos

Las objetos en R son guardados en formato .rdata.

#Ejercicios de la sesión 01.
x <- c(1, 2, 3, 4, 8, 9, 10)
y <- c("si", "si", "si", "si", "no", "no", "no")
z <- c(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE)
genero <- c(1, 2, 2, 1, 1, 1, 3)
generof <- factor(genero, labels = c("hombre", "mujer", "trans"))
bbdd <- data.frame(x, y, z, generof)
rm(x,y,z,genero,generof)
save(bbdd,file="02 ejemplo.rdata") #guardar base de datos. Sirve para guardar cualquier tipo de objeto
rm(bbdd) #Borrar base de datos

Abrir un objeto guardado como .rdata.

load("02 ejemplo.rdata") #Ejemplo de cargar base de datos en formato R

La flexibilidad del lenguaje R permite abrir y guardar bases de datos en prácticamente cualquier formato. Revisaremos cómo trabajar con los formatos más comunes en sociología: .sav (SPSS), .dta (Stata), .xls (Excel) y .csv.

Un ejemplo con SPSS.

rm(bbdd) #Borrar base de datos
#Abrir base de datos SPSS (CEP mayo-junio 2019)
CEPjunio2019 <- read.spss("Encuesta CEP 83 May 2019 v1.sav", to.data.frame = TRUE)
dim(CEPjunio2019) #Informa la cantidad de filas (casos) y columnas (variables)
## [1] 1380  249
colnames(CEPjunio2019) #Muestra los nombres de cada columna en la base de datos
##   [1] "ID_UNICO"         "UMP"              "ZONA"            
##   [4] "TOTAL_HOGAR"      "FECHAINI"         "REGION"          
##   [7] "COMUNA"           "GSE"              "SV_1"            
##  [10] "SV_2"             "MB_P1_1"          "MB_P1_2"         
##  [13] "MB_P1_3"          "MB_P2"            "MB_P3"           
##  [16] "MB_P4"            "MB_P5"            "MB_P6"           
##  [19] "MB_P7"            "MB_P8"            "MB_P9"           
##  [22] "MB_P10"           "MB_P11"           "MB_12_1"         
##  [25] "MB_12_2"          "MB_12_3"          "MB_12_4"         
##  [28] "MB_12_5"          "MB_12_6"          "MB_12_7"         
##  [31] "MB_12_8"          "MB_P13"           "MB_P13_OTRO"     
##  [34] "MB_P13A"          "MB_P13A_OTRO"     "MB_P14"          
##  [37] "MB_P14A"          "MB_P15_A"         "MB_P15_B"        
##  [40] "MB_P15_C"         "MB_P15_D"         "MB_P15_E"        
##  [43] "MB_P15_F"         "MB_P15_G"         "MB_P15_H"        
##  [46] "MB_P15_I"         "MB_P15_J"         "MB_P15_K"        
##  [49] "MB_P15_L"         "MB_P15_M"         "MB_P15_N"        
##  [52] "MB_P15_O"         "MB_P15_P"         "MB_P15_Q"        
##  [55] "MB_P15_R"         "MB_P15_S"         "MB_P15_T"        
##  [58] "MB_P15_U"         "MB_P15_V"         "MB_P15_W"        
##  [61] "MB_P15_X"         "MB_P15_Y"         "MB_P15_Z"        
##  [64] "MB_P15_AA"        "MB_P15_BB"        "MB_16_1"         
##  [67] "MB_16_2"          "MB_16_3"          "MB_16_4"         
##  [70] "MB_16_5"          "MB_16_6"          "MB_16_7"         
##  [73] "MB_P17"           "MB_P18_1"         "MB_P18_2"        
##  [76] "MB_P19_1"         "MB_P19_2"         "MB_P20"          
##  [79] "MB_P21"           "MB_P22"           "MB_P23"          
##  [82] "MB_P24_1"         "MB_P24_2"         "M2_P1_1"         
##  [85] "M2_P1_2"          "M2_P1_3"          "M2_P1_4"         
##  [88] "M2_P1_5"          "M2_P1_6"          "M2_P1_7"         
##  [91] "M2_P1_8"          "M2_P1_9"          "M2_P1_10"        
##  [94] "M2_P1_11"         "M2_P2_DOCTOR"     "M2_P2A_1"        
##  [97] "M2_P2_PRESIDENTE" "M2_P2A_2"         "M2_P2_VENDEDOR"  
## [100] "M2_P2A_3"         "M2_P2_OBRERO"     "M2_P2A_4"        
## [103] "M2_P2_MINISTRO"   "M2_P2A_5"         "M2_P3_DOCTOR"    
## [106] "M2_P3A_1"         "M2_P3_PRESIDENTE" "M2_P3A_2"        
## [109] "M2_P3_VENDEDOR"   "M2_P3A_3"         "M2_P3_OBRERO"    
## [112] "M2_P3A_4"         "M2_P3_MINISTRO"   "M2_P3A_5"        
## [115] "M2_P4_1"          "M2_P4_2"          "M2_P4_3"         
## [118] "M2_P4_4"          "M2_P5"            "M2_P6"           
## [121] "M2_P7"            "M2_P8A"           "M2_P8B"          
## [124] "M2_P9A"           "M2_P9B"           "M2_P10"          
## [127] "M2_P11_1"         "M2_P11_2"         "M2_P11_3"        
## [130] "M2_P12_1"         "M2_P12_2"         "M2_P12_3"        
## [133] "M2_P12_4"         "M2_P12_5"         "M2_P13A"         
## [136] "M2_P13B"          "M2_P13C"          "M2_P14_1"        
## [139] "M2_P14_2"         "M2_P14_3"         "M2_P14_4"        
## [142] "M2_P15A"          "M2_P15B"          "M2_P16"          
## [145] "M2_P17A"          "M2_P17B"          "M2_P18A"         
## [148] "M2_P18B"          "M2_P18C"          "M2_P19"          
## [151] "M2_P20_1"         "M2_P20_2"         "M2_P20_3"        
## [154] "M2_P20_4"         "M2_P20_5"         "M2_P21_1"        
## [157] "M2_P21_2"         "M2_P21_3"         "M2_P21_4"        
## [160] "M2_P21_5"         "M2_P22"           "M2_P23"          
## [163] "M2_P24_1"         "M2_P24_2"         "M2_P24_3"        
## [166] "M2_P24_4"         "M2_P24_5"         "M2_P24_6"        
## [169] "DS_P1_sexo"       "DS_P2_EXACTA"     "DS_P2A_DIA"      
## [172] "DS_P2A_MES"       "DS_P2A_ANO"       "DS_P3"           
## [175] "DS_P4"            "DS_P5"            "DS_P6_OTRO"      
## [178] "DS_P7"            "DS_P9"            "DS_P9A_OTRO"     
## [181] "DS_P10"           "DS_P11"           "DS_P12A_1"       
## [184] "DS_P1A"           "DS_P12B_1"        "DS_P16"          
## [187] "DS_P19"           "DS_P12C_1"        "DS_P12"          
## [190] "DS_P13"           "DS_P14"           "DS_P15"          
## [193] "DS_P16_1"         "DS_P17"           "DS_P18"          
## [196] "DS_P19A"          "DS_P20"           "DS_P21"          
## [199] "DS_P22_OTRO"      "DS_P23"           "DS_P24"          
## [202] "DS_P25A_1"        "DS_P25B_1"        "DS_P25C_1"       
## [205] "DS_P26"           "DS_P27"           "DS_P28"          
## [208] "DS_P28_OTRA"      "DS_P29"           "DS_P30"          
## [211] "DS_P31"           "DS_P32A"          "DS_P32B"         
## [214] "DS_P32B_OTRO"     "DS_P33"           "DS_P34"          
## [217] "DS_P35"           "DS_P35A_OTRO"     "DS_P36"          
## [220] "DS_P36A_OTRO"     "DS_P37"           "DS_P37A_OTRO"    
## [223] "DS_P38"           "DS_P39"           "DS_P40"          
## [226] "DS_P41A"          "DS_P42A"          "DS_P43"          
## [229] "DS_P44"           "DS_P45_1"         "DS_P45_2"        
## [232] "DS_P45_3"         "DS_P45_4"         "DS_P45_5"        
## [235] "DS_P45_6"         "DS_P45_7"         "DS_P45_8"        
## [238] "DS_P45_9"         "DS_P45_10"        "DS_P45_11"       
## [241] "DS_P45_12"        "DS_P45_13"        "DS_P45_14"       
## [244] "DS_P45_15"        "DS_P45_16"        "DS_P45_17"       
## [247] "DS_P46_1"         "DS_P46_2"         "FACTOR"

Un ejemplo con Stata.

rm(CEPjunio2019) #Remover del entorno de trabajo
Casen2017 <- read.dta("Casen 2017.dta") #Abrir base de datos
dim(Casen2017)
## [1] 216439     13
colnames(Casen2017)
##  [1] "folio"   "region"  "comuna"  "zona"    "pco1"    "sexo"    "edad"   
##  [8] "ypc"     "pobreza" "dau"     "qaut"    "numper"  "educ"

Un ejemplo con Excel.

Formato .xls

rm(Casen2017) #Remover del entorno de trabajo
Gini <- read_xls("Gini.xls", sheet=1) #Abrir excel xls
dim(Gini)
## [1] 264  29
colnames(Gini)
##  [1] "Country Name" "1991"         "1992"         "1993"         "1994"        
##  [6] "1995"         "1996"         "1997"         "1998"         "1999"        
## [11] "2000"         "2001"         "2002"         "2003"         "2004"        
## [16] "2005"         "2006"         "2007"         "2008"         "2009"        
## [21] "2010"         "2011"         "2012"         "2013"         "2014"        
## [26] "2015"         "2016"         "2017"         "2018"

Formato .xlsx

rm(Gini) #Remover del entorno de trabajo
Gini <- read_xlsx("Gini.xlsx", sheet=1) #Abrir excel xlsx
dim(Gini)
## [1] 264  29
colnames(Gini)
##  [1] "Country Name" "1991"         "1992"         "1993"         "1994"        
##  [6] "1995"         "1996"         "1997"         "1998"         "1999"        
## [11] "2000"         "2001"         "2002"         "2003"         "2004"        
## [16] "2005"         "2006"         "2007"         "2008"         "2009"        
## [21] "2010"         "2011"         "2012"         "2013"         "2014"        
## [26] "2015"         "2016"         "2017"         "2018"

Un ejemplo con csv.

rm(Gini) #Remover del entorno de trabajo
Gini <- read.csv("Gini.csv") #Abrir csv o cvs2 dependiendo del formato
dim(Gini) #raro
## [1] 264   1
colnames(Gini) #muy raro
## [1] "Country.Name.1991.1992.1993.1994.1995.1996.1997.1998.1999.2000.2001.2002.2003.2004.2005.2006.2007.2008.2009.2010.2011.2012.2013.2014.2015.2016.2017.2018"
rm(Gini) #Remover objeto
Gini <- read.csv2("Gini.csv") #Probar con read.csv2
dim(Gini) #Ahora si
## [1] 264  29
colnames(Gini) #Todo bien
##  [1] "Country.Name" "X1991"        "X1992"        "X1993"        "X1994"       
##  [6] "X1995"        "X1996"        "X1997"        "X1998"        "X1999"       
## [11] "X2000"        "X2001"        "X2002"        "X2003"        "X2004"       
## [16] "X2005"        "X2006"        "X2007"        "X2008"        "X2009"       
## [21] "X2010"        "X2011"        "X2012"        "X2013"        "X2014"       
## [26] "X2015"        "X2016"        "X2017"        "X2018"
rm(Gini) #Remover objeto

Ejemplo de procesamiento de datos

rm(list=ls()) #Limpiar entorno de trabajo
setwd("/home/daniel/Dropbox/U CENTRAL/02 2020/02 Segundo semestre 2020/Taller de análisis de datos sociales en R/Clases/02 sesion") #Escribir el directorio en que va a trabajar
library(foreign)
library(dplyr)

Cargar base de datos original (Casen 2017).

data2017 <- read.spss("Casen 2017.sav", to.data.frame = TRUE) #Cargar base de datos. Puede demorar unos minutos por el tamaño del archivo
dim(data2017) #Dimensiones
## [1] 216439    808

Trabajaremos sólo con los casos correspondientes a individuos con 15 años o más y que vivan en la macrozona norte.

levels(data2017$region) #Ver niveles
##  [1] "Región de Tarapacá"                              
##  [2] "Región de Antofagasta"                           
##  [3] "Región de Atacama"                               
##  [4] "Región de Coquimbo"                              
##  [5] "Región de Valparaíso"                            
##  [6] "Región del Libertador Gral. Bernardo O’Higgins"  
##  [7] "Región del Maule"                                
##  [8] "Región del Biobío"                               
##  [9] "Región de La Araucanía"                          
## [10] "Región de Los Lagos"                             
## [11] "Región de Ayséndel Gral. Carlos Ibáñez del Campo"
## [12] "Región de Magallanes y de la Antártica Chilena"  
## [13] "Región Metropolitana de Santiago"                
## [14] "Región de Los Ríos"                              
## [15] "Región de Arica y Parinacota"                    
## [16] "Región de Ñuble"
casen2017 <- filter(data2017, edad >=15, 
                     region == "Región de Tarapacá" | region == "Región de Antofagasta" |
                     region == "Región de Atacama" | region == "Región de Coquimbo" |
                     region == "Región de Arica y Parinacota") #Seleccionar casos
dim(casen2017) #Dimensiones
## [1] 33981   808

Además, seleccionamos el subconjunto de variables con las que se trabajará.

casen2017 <- select(casen2017 ,c(folio,
                                 o,
                                 region,
                                 comuna,
                                 pco1,
                                 activ,
                                 pobreza,)) #Listado de variables seleccionadas
dim(casen2017) #Comparar con bbdd original
## [1] 33981     7
dim(data2017)
## [1] 216439    808

Ordenar los casos por región, comuna y folio.

casen2017 <- arrange(casen2017, region, comuna, folio)

Renombrar variables.

casen2017 <- rename(casen2017, parentezco = pco1)

Recodificar variable de pobreza absoluta.

levels(casen2017$pobreza)
## [1] "Pobres extremos"    "Pobres no extremos" "No pobres"
casen2017$pobreza.absoluta <- recode(casen2017$pobreza, 
                                     "Pobres extremos" = "Pobres", 
                                     "Pobres no extremos" = "Pobres")

Cantidad de personas que trabajan en el hogar.

levels(casen2017$activ) #Ver niveles
## [1] "Ocupados"    "Desocupados" "Inactivos"
casen2017$ocu <- recode(casen2017$activ,
                          "Ocupados" = "Trabaja",
                          "Desocupados" = "No trabaja",
                          "Inactivos" = "No trabaja") #Recodificar

nocuhogar <- function(x){
  nocuhogar <-0
  for (n in x){
    if(n=="Trabaja")nocuhogar<-nocuhogar+1
    
  }
  return(nocuhogar)
} #Crear una función y almacenarla en el objeto nocuhogar

nocuhogar <- aggregate(casen2017$ocu, by=list(casen2017$folio),FUN = nocuhogar) #Agregar información a nivel hogar
names(nocuhogar) #Ver nombres
## [1] "Group.1" "x"
nocuhogar <- rename(nocuhogar, folio = Group.1, nocu = x) #Renombrar variables

casen2017 <- inner_join(casen2017,nocuhogar, by = "folio") #Fundir bases de datos (agregar variables)
rm(nocuhogar) #Se borra base de datos nivel hogar

Cantidad de miembros en el hogar.

nhogar <- function(x){
  nhogar <-0
  for (n in x){
    if(n!="Servicio Doméstico P. Adentro")nhogar<-nhogar+1
  }
  return(nhogar)
} #Crear una función y almacenarla en el objeto nhogar

nhogar <- aggregate(data2017$pco1, by=list(data2017$folio),FUN = nhogar) #Se agrega información a nivel hogar
names(nhogar) #Ver nombres
## [1] "Group.1" "x"
nhogar <- rename(nhogar, folio = Group.1, nhogar = x) #Renombrar variables
casen2017<-inner_join(casen2017,nhogar, by = "folio") #Fundir bases de datos (agregar variables) de datos original (nivel personas)
rm(nhogar) #Se borra base de datos nivel hogar
rm(data2017) #Remover del entorno de trabajo

Calcular variables “tasa de dependencia en el hogar” (número de ocupados / número de personas en el hogar).

casen2017 <- mutate(casen2017, tasa.dependencia = nocu/nhogar)
casen2017$tasa.dependencia[casen2017$tasa.dependencia==2] <- NA
plot(x = casen2017$pobreza.absoluta, y = casen2017$tasa.dependencia)

save(casen2017,file="datos2017.rdata")