Consejo para escribir “código”"

En general, cuando hacemos nuestro código querremos verificar que nuestras librerías estén instaladas. Si actualizamos nuestro R y Rstudio es probable (sobre todo en MAC) que hayamos perdido alguno.

Este es un ejemplo de un código. Listamos los paquetes que sabemos que usamos en nuestro código en un vector

paquetes<-c("foreign","tidyverse", "sjlabelled", "stargazer", "sjPlot", "survey", "questionr")

Y con este código instalamos los paquetes del vector

nuevos.paquetes<- paquetes[!(paquetes %in% installed.packages()[,"Package"])]
if(length(nuevos.paquetes)) install.packages(nuevos.paquetes, dependencies = T)

Importando más datos

¡Recuerda establecer tu directorio!

setwd("/Users/anaescoto/Dropbox/2020/R_invierno")

Hay muchos formatos de almacenamiento de bases de datos. Vamos a aprender a importar información desde ellos.

Desde Excel

El paquete más compatible con RStudio es readxl. A veces, otros paquetes tienen más problemas de configuración entre R y el Java.

library(readxl) # Recuerda que hay llamar al paquete
ICI_2018 <- read_excel("./datos/ICI_2018.xlsx", sheet = "para_importar")
## New names:
## * `` -> ...128
## * `` -> ...129
## * `` -> ...132
## * `PIB (Paridad de Poder Adquisitivo)` -> `PIB (Paridad de Poder Adquisitivo)...135`
## * `PIB (Paridad de Poder Adquisitivo)` -> `PIB (Paridad de Poder Adquisitivo)...136`
## * … and 6 more problems
#View(ICI_2018)

Como el nombre de paquete lo indica, sólo lee. Para escribir en este formato, recomiendo el paquete “openxlsx”. Lo instalamos anteriormente.

library(openxlsx)

Si quisiéramos exportar un objeto a Excel

openxlsx::write.xlsx(ICI_2018, file = "Mi_Exportación.xlsx")
## Note: zip::zip() is deprecated, please use zip::zipr() instead

Desde STATA y SPSS

Si bien también se puede realizar desde el paquete foreign. Pero este no importa algunas características como las etiquetas y tampoco funciona con las versiones más nuevas de STATA. Vamos a instalar otro paquete, compatible con el mundo tidyverse.

library(haven) #¡Recuerda llamar el paquete!

Recuerda que no hay que instalarlo (viene adentro de tidyverse). Se instalasólo la primera vez. Una vez instalado un paquete, lo llamamos con el comando “library”

SDEMT319_10 <- read_dta("datos/SDEMT319_10.dta")

!Importante, a R no le gustan los objetos con nombres que empiezan en números

El paquete haven sí exporta información.

write_dta(SDEMT319_10 , "datos/mi_exportación.dta", version = 12)

Con SSPS es muy parecido. Dentro de “haven” hay una función específica para ello.

sdemt319_10 <- read_sav("datos/sdemt319_10.sav")

Para escribir

write_sav(sdemt319_10 , "mi_exportacion.sav")

Checa que en todas las exportaciones en los nombres hay que incluir la extensión del programa. Si quieres guardar en un lugar diferente al directorio del trabajo, hay que escribir toda la ruta dentro de la computadora.

Recordemos nuestra base importada desde .dbf

library(foreign) #Recuerda llamar la librería!
sdemt319_10<-read.dbf("./datos/SDEMT319_10.dbf")

Vamos a revisar la base, brevemente la base

class(sdemt319_10) # tipo de objeto
## [1] "data.frame"
names(sdemt319_10) # lista las variables
##   [1] "R_DEF"      "LOC"        "MUN"        "EST"        "EST_D"     
##   [6] "AGEB"       "T_LOC"      "CD_A"       "ENT"        "CON"       
##  [11] "UPM"        "D_SEM"      "N_PRO_VIV"  "V_SEL"      "N_HOG"     
##  [16] "H_MUD"      "N_ENT"      "PER"        "N_REN"      "C_RES"     
##  [21] "PAR_C"      "SEX"        "EDA"        "NAC_DIA"    "NAC_MES"   
##  [26] "NAC_ANIO"   "L_NAC_C"    "CS_P12"     "CS_P13_1"   "CS_P13_2"  
##  [31] "CS_P14_C"   "CS_P15"     "CS_P16"     "CS_P17"     "N_HIJ"     
##  [36] "E_CON"      "CS_AD_MOT"  "CS_P20_DES" "CS_AD_DES"  "CS_NR_MOT" 
##  [41] "CS_P22_DES" "CS_NR_ORI"  "UR"         "ZONA"       "SALARIO"   
##  [46] "FAC"        "CLASE1"     "CLASE2"     "CLASE3"     "POS_OCU"   
##  [51] "SEG_SOC"    "RAMA"       "C_OCU11C"   "ING7C"      "DUR9C"     
##  [56] "EMPLE7C"    "MEDICA5C"   "BUSCAR5C"   "RAMA_EST1"  "RAMA_EST2" 
##  [61] "DUR_EST"    "AMBITO1"    "AMBITO2"    "TUE1"       "TUE2"      
##  [66] "TUE3"       "BUSQUEDA"   "D_ANT_LAB"  "D_CEXP_EST" "DUR_DES"   
##  [71] "SUB_O"      "S_CLASIFI"  "REMUNE2C"   "PRE_ASA"    "TIP_CON"   
##  [76] "DISPO"      "NODISPO"    "C_INAC5C"   "PNEA_EST"   "NIV_INS"   
##  [81] "EDA5C"      "EDA7C"      "EDA12C"     "EDA19C"     "HIJ5C"     
##  [86] "DOMESTICO"  "ANIOS_ESC"  "HRSOCUP"    "INGOCUP"    "ING_X_HRS" 
##  [91] "TPG_P8A"    "TCCO"       "CP_ANOC"    "IMSSISSSTE" "MA48ME1SM" 
##  [96] "P14APOYOS"  "SCIAN"      "T_TRA"      "EMP_PPAL"   "TUE_PPAL"  
## [101] "TRANS_PPAL" "MH_FIL2"    "MH_COL"     "SEC_INS"
head(sdemt319_10) # muestra las primeras 6 líneas
##   R_DEF  LOC MUN EST EST_D  AGEB T_LOC CD_A ENT   CON     UPM D_SEM
## 1    00 0001 002  10   117 00000     1   01  09 40001 0900471   101
## 2    00 0001 006  20   118 00000     1   01  09 40003 0906058   101
## 3    00 0001 006  20   118 00000     1   01  09 40003 0906058   101
## 4    00 0001 006  20   118 00000     1   01  09 40003 0906058   101
## 5    00 0001 006  20   118 00000     1   01  09 40003 0906058   101
## 6    00 0001 011  20   118 00000     1   01  09 40005 0913239   101
##   N_PRO_VIV V_SEL N_HOG H_MUD N_ENT PER N_REN C_RES PAR_C SEX EDA NAC_DIA
## 1      0053    03     1     0     3 319    01     1   101   1  70      14
## 2      0012    01     1     0     3 319    05     1   409   2  03      02
## 3      0054    02     1     0     3 319    01     1   101   2  87      13
## 4      0054    02     1     0     3 319    05     1   301   2  51      13
## 5      0174    05     1     0     3 319    04     1   301   1  14      06
## 6      0009    01     1     0     3 319    02     1   201   1  71      11
##   NAC_MES NAC_ANIO L_NAC_C CS_P12 CS_P13_1 CS_P13_2 CS_P14_C CS_P15 CS_P16
## 1      09     1948     009      1       07        4     5531      3      1
## 2      03     2016     009   <NA>     <NA>     <NA>     <NA>   <NA>   <NA>
## 3      06     1932     015      1       06        2     1800      1      1
## 4      03     1968     009      1       07        2     5312      3      2
## 5      07     2005     009      1       03        2     <NA>   <NA>   <NA>
## 6      02     1948     032      1       03        3     <NA>   <NA>   <NA>
##   CS_P17 N_HIJ E_CON CS_AD_MOT CS_P20_DES CS_AD_DES CS_NR_MOT CS_P22_DES
## 1      2  <NA>     6      <NA>       <NA>      <NA>      <NA>       <NA>
## 2   <NA>  <NA>  <NA>      <NA>       <NA>      <NA>      <NA>       <NA>
## 3      2    14     4      <NA>       <NA>      <NA>      <NA>       <NA>
## 4      2    01     2      <NA>       <NA>      <NA>      <NA>       <NA>
## 5      1  <NA>     6      <NA>       <NA>      <NA>      <NA>       <NA>
## 6      2  <NA>     5      <NA>       <NA>      <NA>      <NA>       <NA>
##   CS_NR_ORI UR ZONA SALARIO  FAC CLASE1 CLASE2 CLASE3 POS_OCU SEG_SOC RAMA
## 1      <NA>  1    2    3080  461      1      1      1       1       1    2
## 2      <NA>  1    2    3080  751      0      0      0       0       0    0
## 3      <NA>  1    2    3080  751      2      4      0       0       0    0
## 4      <NA>  1    2    3080  751      1      1      1       4       2    3
## 5      <NA>  1    2    3080  751      2      4      0       0       0    0
## 6      <NA>  1    2    3080 1178      1      1      1       1       2    4
##   C_OCU11C ING7C DUR9C EMPLE7C MEDICA5C BUSCAR5C RAMA_EST1 RAMA_EST2
## 1        5     2     8       5        3        4         2         3
## 2        0     0     0       0        0        0         0         0
## 3        0     0     0       0        0        0         0         0
## 4        6     6     8       2        1        4         3         5
## 5        0     0     0       0        0        0         0         0
## 6        7     3     3       2        1        4         3         7
##   DUR_EST AMBITO1 AMBITO2 TUE1 TUE2 TUE3 BUSQUEDA D_ANT_LAB D_CEXP_EST
## 1       5       2       4    1    1    0        2         0          0
## 2       0       0       0    0    0    0        0         0          0
## 3       0       0       0    0    0    0        0         0          0
## 4       5       2       3    1    2    0        2         0          0
## 5       0       0       0    0    0    0        0         0          0
## 6       3       2       2    3    5    0        2         0          0
##   DUR_DES SUB_O S_CLASIFI REMUNE2C PRE_ASA TIP_CON DISPO NODISPO C_INAC5C
## 1       0     0         0        1       1       3     0       0        0
## 2       0     0         0        0       0       0     0       0        0
## 3       0     0         0        0       0       0     0       3        5
## 4       0     0         0        0       0       0     0       0        0
## 5       0     0         0        0       0       0     0       3        1
## 6       0     0         0        2       2       5     0       0        0
##   PNEA_EST NIV_INS EDA5C EDA7C EDA12C EDA19C HIJ5C DOMESTICO ANIOS_ESC
## 1        0       4     4     6     11     17     0         1        16
## 2        0       0     0     0      0      2     0         0         0
## 3        6       2     4     6     11     18     4         6         8
## 4        0       4     3     5      8     13     2         3        14
## 5        4       2     0     0      0      5     0         7         8
## 6        0       3     4     6     11     17     0         3         9
##   HRSOCUP INGOCUP ING_X_HRS TPG_P8A TCCO CP_ANOC IMSSISSSTE MA48ME1SM
## 1      72       0       0.0       0    3       0          1         0
## 2       0       0       0.0       0    0       0          0         0
## 3       0       0       0.0       0    0       0          0         0
## 4      84       0       0.0       0    0       0          4         0
## 5       0       0       0.0       0    0       0          0         0
## 6      24    6450      62.5       0    0       0          4         0
##   P14APOYOS SCIAN T_TRA EMP_PPAL TUE_PPAL TRANS_PPAL MH_FIL2 MH_COL
## 1         0     5     1        2        2          0       3      2
## 2         0     0     0        0        0          0       0      0
## 3         0     0     1        0        0          0       0      0
## 4         0     7     1        1        2          0       3      9
## 5         0     0     1        0        0          0       0      0
## 6         0     8     1        1        1          0       1      3
##   SEC_INS
## 1       2
## 2       0
## 3       0
## 4       4
## 5       0
## 6       8
table(sdemt319_10$CLASE2) # un tabulado simple
## 
##     0     1     2     3     4 
##  7150 18780   841  1775 12003

Revisión con dplyr

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Operador de “pipe” o “tubería” %>% (Ctrl+Shift+M) Antes de continuar, presentemos el operador “pipe” %>%. dplyr importa este operador de otro paquete (magrittr). Este operador le permite canalizar la salida de una función a la entrada de otra función. En lugar de funciones de anidamiento (lectura desde adentro hacia afuera), la idea de la tubería es leer las funciones de izquierda a derecha.

SDEMT319_10 %>% 
    select(par_c, ing_x_hrs) %>% 
    head
## # A tibble: 6 x 2
##   par_c ing_x_hrs
##   <dbl>     <dbl>
## 1   101       0  
## 2   409       0  
## 3   101       0  
## 4   301       0  
## 5   301       0  
## 6   201      62.5
SDEMT319_10 %>% 
    select(par_c, ing_x_hrs) %>% 
    glimpse
## Observations: 4,059
## Variables: 2
## $ par_c     <dbl> 101, 409, 101, 301, 301, 201, 301, 101, 301, 101, 301,…
## $ ing_x_hrs <dbl> 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 62.50000,…

Etiquetas importadas y cómo usarlas

Podemos ver que los objetos “data.frame”(spoiler, ya hablaremos de ellos), tiene una clase que se llama “haven_labelled”

class(SDEMT319_10$sex)
## [1] "haven_labelled"

¿Esto que significa? Que en el programa original hay alguna etiqueta que podemos usar.

library(sjlabelled)
## 
## Attaching package: 'sjlabelled'
## The following object is masked from 'package:dplyr':
## 
##     as_label
## The following objects are masked from 'package:haven':
## 
##     as_factor, read_sas, read_spss, read_stata, write_sas,
##     zap_labels
table(SDEMT319_10$sex)
## 
##    1    2 
## 1992 2067
table(as_label(SDEMT319_10$sex))
## 
## Hombre  Mujer 
##   1992   2067

Leer desde archivos de texto y desde una url

Desde el portal https://datos.gob.mx/ tenemos acceso a directo a varias fuentes de información, al ser datos abiertos, los archivos de texto son muy comunes.

Leeremos parte de esa información, específicamente la de CONAPO https://datos.gob.mx/busca/dataset/proyecciones-de-la-poblacion-de-mexico-y-de-las-entidades-federativas-2016-2050

En estas bases hay acentos y otros carecteres especiales del español, por lo que agregaremos una opción de “encoding”, de lo contrario da error.

mig_inter_quin_proyecciones <- read.csv("http://www.conapo.gob.mx/work/models/CONAPO/Datos_Abiertos/Proyecciones2018/mig_inter_quin_proyecciones.csv", encoding="latin1")
#View(mig_inter_quin_proyecciones)
names(mig_inter_quin_proyecciones)
## [1] "RENGLON"     "AÑO"         "ENTIDAD"     "CVE_GEO"     "EDAD"       
## [6] "SEXO"        "EMIGRANTES"  "INMIGRANTES"

Ejercicio

¡Sin resolución! Escoja una base de CONAPO. Importela Replique la exploración de la práctica Utilice al menos un comando con dplyr

Envíe el script utilizando la liga: https://www.dropbox.com/request/AVqfFUydlzu5FUwPF8Ly