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")