Objetivos:

1. Funciones, paquetes y librerías

Varias funciones estadísticas estándar están disponibles como funciones principales. Otras funciones adicionales y específicas están disponibles a través de librerías pre-instaladas o de librerías que es necesario instalar. Se usa la función install.packages() para instalar una librería desde CRAN (Comprehensive R Archive Network). Luego de instalada una librería, se llama a uso y disponibilidad de sus funciones con library().

La descarga de paquetes se hace una sola vez en nuestra PC y luego se los “llama” al inicio de cada sesión. Pero si actualizo o reinstalo R, debo reinstalar las librerías.

Ejemplo: instalamos y accedemos a la librería “gdata”.

library(gdata)
## Warning: package 'gdata' was built under R version 4.3.3
## 
## Attaching package: 'gdata'
## The following object is masked from 'package:stats':
## 
##     nobs
## The following object is masked from 'package:utils':
## 
##     object.size
## The following object is masked from 'package:base':
## 
##     startsWith

Pueden aparecer avisos, pero la librería ya está disponible para usar sus funciones.

Para obtener información sobre una librería:

library(help=gdata)

Para obtener ayuda sobre una función en particular dentro de una librería:

library(foreign)
help(read.spss)

A veces es preciso indicar el repositorio desde el que R debe descargar el paquete. Ejemplos:

install.packages("foreign", repos="http://cran.itam.mx/", dependencies = TRUE)

Algunas librerías frecuentes

Algunas de las librerías que usaremos frecuentemente durante el curso y que conviene tener instaladas son:

if (!require("TraMineR")) install.packages("TraMineR")
library(TraMineR)
if (!require("prettyR")) install.packages("prettyR")
library(prettyR)
if (!require("foreign")) install.packages("foreign")
library(foreign)
if (!require("cluster")) install.packages("cluster")
library(cluster)
if (!require("dplyr")) install.packages("dplyr")
library(dplyr)
if (!require("memisc")) install.packages("memisc")
library(memisc)
if (!require("car")) install.packages("car")
library(car)
if (!require("skimr")) install.packages("skimr")
library(skimr)

2. Importar y exportar datos

Primero hay que saber en qué directorio trabaja R (dónde busca y envía archivos).

getwd()
## [1] "C:/Users/liaca/OneDrive - El Colegio de México A.C/06_CLASES/FLACSO_Secuencias"

Esta función nos da el directorio en el que está trabajando R.

Para establecer el directorio en el que deseamos que trabaje usamos la función setwd.

?setwd
setwd("C:/Users/liaca/OneDrive - El Colegio de México A.C/06_CLASES/FLACSO_Secuencias/DATOS")
getwd()
## [1] "C:/Users/liaca/OneDrive - El Colegio de México A.C/06_CLASES/FLACSO_Secuencias/DATOS"

Si fijamos el directorio en una carpeta que contenga los datos que vamos a cargar, podemos llamar después los archivos directamente. Atención a las diagonales; en R tienen que ser hacia la derecha (“/”), pero en PC la ruta se indica con diagonales hacia la izquierda (“"). Hay que cambiarlas.

Cargar datos en R

  • Archivo en formato txt
base_txt <- read.table("base_ej.txt", header=TRUE)
head(base_txt) 

header=TRUE indica que la primera fila es el nombre de las variables

##   id sexo edad hijos
## 1  1    1   34     2
## 2  2    2   28     0
## 3  3    1   45     3
## 4  4    2   39     1
## 5  5    2   31     0
  • Archivo en formato csv
base_csv <- read.csv("testdat.csv", header=T)
head(base_csv)
##   Variable1 Variable2
## 1         6        67
## 2        65        16
## 3        12        56
## 4        56        34
## 5        45        54
## 6        84        42
  • Archivo de Excel
if (!require("openxlsx")) install.packages("openxlsx")
library(openxlsx)
base_xls <- read.xlsx("test.xlsx", sheet=1)

sheet=1 indica que tiene que importar los datos de la primera hoja del Excel.

##   Variable1 Variable2
## 1         6        67
## 2        65        16
## 3        12        56
## 4        56        34
## 5        45        54
## 6        84        42
  • Base de datos en SPSS
base_spss <- read.spss("test_spss.sav", to.data.frame=TRUE)
head(base_spss)
##   id sexo edad hijos
## 1  1    1   34     2
## 2  2    2   28     0
## 3  3    1   45     3
## 4  4    2   39     1
## 5  5    2   31     0
  • Base de datos en Stata
if (!require("haven")) install.packages("haven")
library(haven)
base_stata <- read_dta("test_stata.dta")
head(base_stata)

En la librería haven se usa la función “read_dta”, que sirve para abrir bases de Stata de versiones 13 y superior. Si la base de datos fue creada con Stata 12 o menos, se puede usar la función “read.dta” de la librería foreign.

## # A tibble: 5 × 4
##      id  sexo  edad hijos
##   <dbl> <dbl> <dbl> <dbl>
## 1     1     1    34     2
## 2     2     2    28     0
## 3     3     1    45     3
## 4     4     2    39     1
## 5     5     2    31     0

Guardar bases de datos

Puede ser útil guardar las bases en un formato distinto, ya sea para guardar resultados (por ejemplo, en Excel) o para usar las bases en otro paquete estadístico (como Stata o SPSS). Los archivos se guardan en el mismo directorio que habíamos indicado antes en setwd(). Podemos cambiarlo antes de guardar, si así lo queremos, o indicar la ruta completa en el comando de write.

  • Como archivo csv
write.csv(base_spss, file="spss_a_csv.csv",colnames=T,sep=",")
  • Como archivo de Excel
library(openxlsx)
write.xlsx(base_txt, "txt_a_xls.xlsx")
  • Como archivo txt
write.table(base_stata, "stata_a_txt.txt", col.names=TRUE)
  • Como archivo de spss
library(haven)
write_sav(base_txt, "txt_a_spss.sav")
  • Como archivo de stata
library(haven)
write_dta(base_txt, "txt_a_stata.dta")

3. Exploración de bases de datos

Antes de empezar, conviene limpiar el entorno de trabajo de los objetos del trabajo previo que ya no vamos a usar.

ls()
## [1] "base_csv"   "base_spss"  "base_stata" "base_txt"   "base_xls"
rm(list=ls())
ls()
## character(0)

ls() muestra la lista de objetos que hay en el entorno. rm los elimina.

Vamos a trabajar con una versión limpia de la Eder 2011, que cargaremos desde un achivo de Stata.

eder <- read.dta("Ederlimpia.dta")

a. Estructura de la base de datos

Veamos cuántas filas y cuántas columnas tiene la base de datos.

dim(eder)
## [1] 109034    170

Tiene 109,034 filas y 170 columnas.

nrow(eder)
## [1] 109034
ncol(eder)
## [1] 170

Nos da la misma información por separado.

Para visualizar la base de datos, usamos el comando View (equivale a pulsar sobre la base en el directorio de trabajo). Abre la base en una ventana aparte.

View(eder)

También podemos visualizar directamente en la consola, indicando que nos muestre los primeros casos de la base de datos.

head(eder)
##   folio cd_a ent  con   upm v_sel n_hog h_mud per d_sem n_pro_viv n_ren
## 1     1   14  01 0167 00092    02     1     0 311   206      0081    02
## 2     1   14  01 0167 00092    02     1     0 311   206      0081    02
## 3     1   14  01 0167 00092    02     1     0 311   206      0081    02
## 4     1   14  01 0167 00092    02     1     0 311   206      0081    02
## 5     1   14  01 0167 00092    02     1     0 311   206      0081    02
## 6     1   14  01 0167 00092    02     1     0 311   206      0081    02
##   edad_retro sex p1_anio p1_mes p1_eda           p2_1 p2_1_c           p2_2
## 1          6   2    1984     10     33 AGUASCALIENTES      1 AGUASCALIENTES
## 2          7   2    1985     10     33 AGUASCALIENTES      1 AGUASCALIENTES
## 3          8   2    1986     10     33 AGUASCALIENTES      1 AGUASCALIENTES
## 4          9   2    1987     10     33 AGUASCALIENTES      1 AGUASCALIENTES
## 5         10   2    1988     10     33 AGUASCALIENTES      1 AGUASCALIENTES
## 6         11   2    1989     10     33 AGUASCALIENTES      1 AGUASCALIENTES
##             p2_3 p2_3_c p2_4 conmig acumig conmign acumign conmigi acumigi
## 1 AGUASCALIENTES      1    2      0      0       0       0       0       0
## 2 AGUASCALIENTES      1    2      0      0       0       0       0       0
## 3 AGUASCALIENTES      1    2      0      0       0       0       0       0
## 4 AGUASCALIENTES      1    2      0      0       0       0       0       0
## 5 AGUASCALIENTES      1    2      0      0       0       0       0       0
## 6 AGUASCALIENTES      1    2      0      0       0       0       0       0
##   sinmig p3_1 p3_2 p3_3 p3_4_anio p3_4_nivel p4_1 p4_3 p4_4 p4_4_c p4_5 p4_5_c
## 1      0    1    1    1         3          2    1    0    0      0    0      0
## 2      0    1    1    1         3          2    1    0    0      0    0      0
## 3      0    1    1    1         3          2    1    0    0      0    0      0
## 4      0    1    1    1         3          2    1    0    0      0    0      0
## 5      0    1    1    1         3          2    1    0    0      0    0      0
## 6      0    1    1    1         3          2    1    0    0      0    0      0
##   p4_6 p4_7 p4_8 p4_9 conlab aculab camlaba aculaba deslabc deslaba p5_1a_pa
## 1    0    0    0    0      0      0       0       0       0       0       60
## 2    0    0    0    0      0      0       0       0       0       0       60
## 3    0    0    0    0      0      0       0       0       0       0       60
## 4    0    0    0    0      0      0       0       0       0       0       60
## 5    0    0    0    0      0      0       0       0       0       0       60
## 6    0    0    0    0      0      0       0       0       0       0       60
##   p5_1b_pa p5_1a_ma p5_1b_ma p5_2 p5_3 p6_1 p6_2_nom_1 p6_2_anio1 p6_3_nup_1
## 1        2       60        2    2    0    1          0          0          0
## 2        2       60        2    2    0    1          0          0          0
## 3        2       60        2    2    0    1          0          0          0
## 4        2       60        2    2    0    1          0          0          0
## 5        2       60        2    2    0    1          0          0          0
## 6        2       60        2    2    0    1          0          0          0
##   p6_6_1 p6_2_nom_2 p6_2_anio2 p6_3_nup_2 p6_6_2 p6_2_nom_3 p6_2_anio3
## 1      0          0          0          0      0          0          0
## 2      0          0          0          0      0          0          0
## 3      0          0          0          0      0          0          0
## 4      0          0          0          0      0          0          0
## 5      0          0          0          0      0          0          0
## 6      0          0          0          0      0          0          0
##   p6_3_nup_3 p6_6_3 p6_2_nom_4 p6_2_anio4 p6_3_nup_4 p6_6_4 sincony p6_7_so
## 1          0      0          0          0          0      0      SO       0
## 2          0      0          0          0          0      0      SO       0
## 3          0      0          0          0          0      0      SO       0
## 4          0      0          0          0          0      0      SO       0
## 5          0      0          0          0          0      0      SO       0
## 6          0      0          0          0          0      0      SO       0
##   p6_7_sa p6_8 p7_1 p7_2_nom_1 p7_2_sex_1 p7_3_1 p7_4_1 p7_5_1 p7_7_1
## 1       0    0    3          0          0      0      0      0      0
## 2       0    0    3          0          0      0      0      0      0
## 3       0    0    3          0          0      0      0      0      0
## 4       0    0    3          0          0      0      0      0      0
## 5       0    0    3          0          0      0      0      0      0
## 6       0    0    3          0          0      0      0      0      0
##   p7_2_nom_2 p7_2_sex_2 p7_3_2 p7_4_2 p7_5_2 p7_7_2 p7_2_nom_3 p7_2_sex_3
## 1          0          0      0      0      0      0          0          0
## 2          0          0      0      0      0      0          0          0
## 3          0          0      0      0      0      0          0          0
## 4          0          0      0      0      0      0          0          0
## 5          0          0      0      0      0      0          0          0
## 6          0          0      0      0      0      0          0          0
##   p7_3_3 p7_4_3 p7_5_3 p7_7_3 p7_2_nom_4 p7_2_sex_4 p7_3_4 p7_4_4 p7_5_4 p7_7_4
## 1      0      0      0      0          0          0      0      0      0      0
## 2      0      0      0      0          0          0      0      0      0      0
## 3      0      0      0      0          0          0      0      0      0      0
## 4      0      0      0      0          0          0      0      0      0      0
## 5      0      0      0      0          0          0      0      0      0      0
## 6      0      0      0      0          0          0      0      0      0      0
##   p7_2_nom_5 p7_2_sex_5 p7_3_5 p7_4_5 p7_5_5 p7_7_5 p7_2_nom_6 p7_2_sex_6
## 1          0          0      0      0      0      0          0          0
## 2          0          0      0      0      0      0          0          0
## 3          0          0      0      0      0      0          0          0
## 4          0          0      0      0      0      0          0          0
## 5          0          0      0      0      0      0          0          0
## 6          0          0      0      0      0      0          0          0
##   p7_3_6 p7_4_6 p7_5_6 p7_7_6 p7_2_nom_7 p7_2_sex_7 p7_3_7 p7_4_7 p7_5_7 p7_7_7
## 1      0      0      0      0          0          0      0      0      0      0
## 2      0      0      0      0          0          0      0      0      0      0
## 3      0      0      0      0          0          0      0      0      0      0
## 4      0      0      0      0          0          0      0      0      0      0
## 5      0      0      0      0          0          0      0      0      0      0
## 6      0      0      0      0          0          0      0      0      0      0
##   p7_2_nom_8 p7_2_sex_8 p7_3_8 p7_4_8 p7_5_8 p7_7_8 p7_2_nom_9 p7_2_sex_9
## 1          0          0      0      0      0      0          0          0
## 2          0          0      0      0      0      0          0          0
## 3          0          0      0      0      0      0          0          0
## 4          0          0      0      0      0      0          0          0
## 5          0          0      0      0      0      0          0          0
## 6          0          0      0      0      0      0          0          0
##   p7_3_9 p7_4_9 p7_5_9 p7_7_9 p7_2_nom10 p7_2_sex10 p7_3_10 p7_4_10 p7_5_10
## 1      0      0      0      0          0          0       0       0       0
## 2      0      0      0      0          0          0       0       0       0
## 3      0      0      0      0          0          0       0       0       0
## 4      0      0      0      0          0          0       0       0       0
## 5      0      0      0      0          0          0       0       0       0
## 6      0      0      0      0          0          0       0       0       0
##   p7_7_10 p7_2_nom11 p7_2_sex11 p7_3_11 p7_4_11 p7_5_11 p7_7_11 p7_2_nom12
## 1       0          0          0       0       0       0       0          0
## 2       0          0          0       0       0       0       0          0
## 3       0          0          0       0       0       0       0          0
## 4       0          0          0       0       0       0       0          0
## 5       0          0          0       0       0       0       0          0
## 6       0          0          0       0       0       0       0          0
##   p7_2_sex12 p7_3_12 p7_4_12 p7_5_12 p7_7_12 p7_2_nom13 p7_2_sex13 p7_3_13
## 1          0       0       0       0       0          0          0       0
## 2          0       0       0       0       0          0          0       0
## 3          0       0       0       0       0          0          0       0
## 4          0       0       0       0       0          0          0       0
## 5          0       0       0       0       0          0          0       0
## 6          0       0       0       0       0          0          0       0
##   p7_4_13 p7_5_13 p7_7_13 p7_2_nom14 p7_2_sex14 p7_3_14 p7_4_14 p7_5_14 p7_7_14
## 1       0       0       0          0          0       0       0       0       0
## 2       0       0       0          0          0       0       0       0       0
## 3       0       0       0          0          0       0       0       0       0
## 4       0       0       0          0          0       0       0       0       0
## 5       0       0       0          0          0       0       0       0       0
## 6       0       0       0          0          0       0       0       0       0
##   acuhijo p8_1  fac anio_naci cohorte tercilesios estrato
## 1       0    0 2103      1978       3       Alto        3
## 2       0    0 2103      1978       3       Alto        3
## 3       0    0 2103      1978       3       Alto        3
## 4       0    0 2103      1978       3       Alto        3
## 5       0    0 2103      1978       3       Alto        3
## 6       0    0 2103      1978       3       Alto        3

Por defecto muestra las primeras 6 filas de todas las variables.

Podemos indicar cuántos casos queremos que muestre y también de qué variables.

head(eder,2)
##   folio cd_a ent  con   upm v_sel n_hog h_mud per d_sem n_pro_viv n_ren
## 1     1   14  01 0167 00092    02     1     0 311   206      0081    02
## 2     1   14  01 0167 00092    02     1     0 311   206      0081    02
##   edad_retro sex p1_anio p1_mes p1_eda           p2_1 p2_1_c           p2_2
## 1          6   2    1984     10     33 AGUASCALIENTES      1 AGUASCALIENTES
## 2          7   2    1985     10     33 AGUASCALIENTES      1 AGUASCALIENTES
##             p2_3 p2_3_c p2_4 conmig acumig conmign acumign conmigi acumigi
## 1 AGUASCALIENTES      1    2      0      0       0       0       0       0
## 2 AGUASCALIENTES      1    2      0      0       0       0       0       0
##   sinmig p3_1 p3_2 p3_3 p3_4_anio p3_4_nivel p4_1 p4_3 p4_4 p4_4_c p4_5 p4_5_c
## 1      0    1    1    1         3          2    1    0    0      0    0      0
## 2      0    1    1    1         3          2    1    0    0      0    0      0
##   p4_6 p4_7 p4_8 p4_9 conlab aculab camlaba aculaba deslabc deslaba p5_1a_pa
## 1    0    0    0    0      0      0       0       0       0       0       60
## 2    0    0    0    0      0      0       0       0       0       0       60
##   p5_1b_pa p5_1a_ma p5_1b_ma p5_2 p5_3 p6_1 p6_2_nom_1 p6_2_anio1 p6_3_nup_1
## 1        2       60        2    2    0    1          0          0          0
## 2        2       60        2    2    0    1          0          0          0
##   p6_6_1 p6_2_nom_2 p6_2_anio2 p6_3_nup_2 p6_6_2 p6_2_nom_3 p6_2_anio3
## 1      0          0          0          0      0          0          0
## 2      0          0          0          0      0          0          0
##   p6_3_nup_3 p6_6_3 p6_2_nom_4 p6_2_anio4 p6_3_nup_4 p6_6_4 sincony p6_7_so
## 1          0      0          0          0          0      0      SO       0
## 2          0      0          0          0          0      0      SO       0
##   p6_7_sa p6_8 p7_1 p7_2_nom_1 p7_2_sex_1 p7_3_1 p7_4_1 p7_5_1 p7_7_1
## 1       0    0    3          0          0      0      0      0      0
## 2       0    0    3          0          0      0      0      0      0
##   p7_2_nom_2 p7_2_sex_2 p7_3_2 p7_4_2 p7_5_2 p7_7_2 p7_2_nom_3 p7_2_sex_3
## 1          0          0      0      0      0      0          0          0
## 2          0          0      0      0      0      0          0          0
##   p7_3_3 p7_4_3 p7_5_3 p7_7_3 p7_2_nom_4 p7_2_sex_4 p7_3_4 p7_4_4 p7_5_4 p7_7_4
## 1      0      0      0      0          0          0      0      0      0      0
## 2      0      0      0      0          0          0      0      0      0      0
##   p7_2_nom_5 p7_2_sex_5 p7_3_5 p7_4_5 p7_5_5 p7_7_5 p7_2_nom_6 p7_2_sex_6
## 1          0          0      0      0      0      0          0          0
## 2          0          0      0      0      0      0          0          0
##   p7_3_6 p7_4_6 p7_5_6 p7_7_6 p7_2_nom_7 p7_2_sex_7 p7_3_7 p7_4_7 p7_5_7 p7_7_7
## 1      0      0      0      0          0          0      0      0      0      0
## 2      0      0      0      0          0          0      0      0      0      0
##   p7_2_nom_8 p7_2_sex_8 p7_3_8 p7_4_8 p7_5_8 p7_7_8 p7_2_nom_9 p7_2_sex_9
## 1          0          0      0      0      0      0          0          0
## 2          0          0      0      0      0      0          0          0
##   p7_3_9 p7_4_9 p7_5_9 p7_7_9 p7_2_nom10 p7_2_sex10 p7_3_10 p7_4_10 p7_5_10
## 1      0      0      0      0          0          0       0       0       0
## 2      0      0      0      0          0          0       0       0       0
##   p7_7_10 p7_2_nom11 p7_2_sex11 p7_3_11 p7_4_11 p7_5_11 p7_7_11 p7_2_nom12
## 1       0          0          0       0       0       0       0          0
## 2       0          0          0       0       0       0       0          0
##   p7_2_sex12 p7_3_12 p7_4_12 p7_5_12 p7_7_12 p7_2_nom13 p7_2_sex13 p7_3_13
## 1          0       0       0       0       0          0          0       0
## 2          0       0       0       0       0          0          0       0
##   p7_4_13 p7_5_13 p7_7_13 p7_2_nom14 p7_2_sex14 p7_3_14 p7_4_14 p7_5_14 p7_7_14
## 1       0       0       0          0          0       0       0       0       0
## 2       0       0       0          0          0       0       0       0       0
##   acuhijo p8_1  fac anio_naci cohorte tercilesios estrato
## 1       0    0 2103      1978       3       Alto        3
## 2       0    0 2103      1978       3       Alto        3

Ahora sólo muestra las dos primeras filas para todas las variables.

head(eder[,c(1:3,13:15)])
##   folio cd_a ent edad_retro sex p1_anio
## 1     1   14  01          6   2    1984
## 2     1   14  01          7   2    1985
## 3     1   14  01          8   2    1986
## 4     1   14  01          9   2    1987
## 5     1   14  01         10   2    1988
## 6     1   14  01         11   2    1989

Ahora muestra las 6 primeras filas, pero sólo de las variables que le indicamos (aquellas entre la 1 y la 3 y entre la 13 y la 15).

También podemos pedirle que muestre casos que cumplen una condición en específico:

eder[eder$folio==3,c(1:3,13:15)]
##     folio cd_a ent edad_retro sex p1_anio
## 83      3   14  01          6   1    1957
## 84      3   14  01          7   1    1958
## 85      3   14  01          8   1    1959
## 86      3   14  01          9   1    1960
## 87      3   14  01         10   1    1961
## 88      3   14  01         11   1    1962
## 89      3   14  01         12   1    1963
## 90      3   14  01         13   1    1964
## 91      3   14  01         14   1    1965
## 92      3   14  01         15   1    1966
## 93      3   14  01         16   1    1967
## 94      3   14  01         17   1    1968
## 95      3   14  01         18   1    1969
## 96      3   14  01         19   1    1970
## 97      3   14  01         20   1    1971
## 98      3   14  01         21   1    1972
## 99      3   14  01         22   1    1973
## 100     3   14  01         23   1    1974
## 101     3   14  01         24   1    1975
## 102     3   14  01         25   1    1976
## 103     3   14  01         26   1    1977
## 104     3   14  01         27   1    1978
## 105     3   14  01         28   1    1979
## 106     3   14  01         29   1    1980
## 107     3   14  01         30   1    1981
## 108     3   14  01         31   1    1982
## 109     3   14  01         32   1    1983
## 110     3   14  01         33   1    1984
## 111     3   14  01         34   1    1985
## 112     3   14  01         35   1    1986
## 113     3   14  01         36   1    1987
## 114     3   14  01         37   1    1988
## 115     3   14  01         38   1    1989
## 116     3   14  01         39   1    1990
## 117     3   14  01         40   1    1991
## 118     3   14  01         41   1    1992
## 119     3   14  01         42   1    1993
## 120     3   14  01         43   1    1994
## 121     3   14  01         44   1    1995
## 122     3   14  01         45   1    1996
## 123     3   14  01         46   1    1997
## 124     3   14  01         47   1    1998
## 125     3   14  01         48   1    1999
## 126     3   14  01         49   1    2000
## 127     3   14  01         50   1    2001
## 128     3   14  01         51   1    2002
## 129     3   14  01         52   1    2003
## 130     3   14  01         53   1    2004
## 131     3   14  01         54   1    2005
## 132     3   14  01         55   1    2006
## 133     3   14  01         56   1    2007
## 134     3   14  01         57   1    2008
## 135     3   14  01         58   1    2009
## 136     3   14  01         59   1    2010
## 137     3   14  01         60   1    2011

Para ver los nombres de las variables de la base de datos:

names(eder)
##   [1] "folio"       "cd_a"        "ent"         "con"         "upm"        
##   [6] "v_sel"       "n_hog"       "h_mud"       "per"         "d_sem"      
##  [11] "n_pro_viv"   "n_ren"       "edad_retro"  "sex"         "p1_anio"    
##  [16] "p1_mes"      "p1_eda"      "p2_1"        "p2_1_c"      "p2_2"       
##  [21] "p2_3"        "p2_3_c"      "p2_4"        "conmig"      "acumig"     
##  [26] "conmign"     "acumign"     "conmigi"     "acumigi"     "sinmig"     
##  [31] "p3_1"        "p3_2"        "p3_3"        "p3_4_anio"   "p3_4_nivel" 
##  [36] "p4_1"        "p4_3"        "p4_4"        "p4_4_c"      "p4_5"       
##  [41] "p4_5_c"      "p4_6"        "p4_7"        "p4_8"        "p4_9"       
##  [46] "conlab"      "aculab"      "camlaba"     "aculaba"     "deslabc"    
##  [51] "deslaba"     "p5_1a_pa"    "p5_1b_pa"    "p5_1a_ma"    "p5_1b_ma"   
##  [56] "p5_2"        "p5_3"        "p6_1"        "p6_2_nom_1"  "p6_2_anio1" 
##  [61] "p6_3_nup_1"  "p6_6_1"      "p6_2_nom_2"  "p6_2_anio2"  "p6_3_nup_2" 
##  [66] "p6_6_2"      "p6_2_nom_3"  "p6_2_anio3"  "p6_3_nup_3"  "p6_6_3"     
##  [71] "p6_2_nom_4"  "p6_2_anio4"  "p6_3_nup_4"  "p6_6_4"      "sincony"    
##  [76] "p6_7_so"     "p6_7_sa"     "p6_8"        "p7_1"        "p7_2_nom_1" 
##  [81] "p7_2_sex_1"  "p7_3_1"      "p7_4_1"      "p7_5_1"      "p7_7_1"     
##  [86] "p7_2_nom_2"  "p7_2_sex_2"  "p7_3_2"      "p7_4_2"      "p7_5_2"     
##  [91] "p7_7_2"      "p7_2_nom_3"  "p7_2_sex_3"  "p7_3_3"      "p7_4_3"     
##  [96] "p7_5_3"      "p7_7_3"      "p7_2_nom_4"  "p7_2_sex_4"  "p7_3_4"     
## [101] "p7_4_4"      "p7_5_4"      "p7_7_4"      "p7_2_nom_5"  "p7_2_sex_5" 
## [106] "p7_3_5"      "p7_4_5"      "p7_5_5"      "p7_7_5"      "p7_2_nom_6" 
## [111] "p7_2_sex_6"  "p7_3_6"      "p7_4_6"      "p7_5_6"      "p7_7_6"     
## [116] "p7_2_nom_7"  "p7_2_sex_7"  "p7_3_7"      "p7_4_7"      "p7_5_7"     
## [121] "p7_7_7"      "p7_2_nom_8"  "p7_2_sex_8"  "p7_3_8"      "p7_4_8"     
## [126] "p7_5_8"      "p7_7_8"      "p7_2_nom_9"  "p7_2_sex_9"  "p7_3_9"     
## [131] "p7_4_9"      "p7_5_9"      "p7_7_9"      "p7_2_nom10"  "p7_2_sex10" 
## [136] "p7_3_10"     "p7_4_10"     "p7_5_10"     "p7_7_10"     "p7_2_nom11" 
## [141] "p7_2_sex11"  "p7_3_11"     "p7_4_11"     "p7_5_11"     "p7_7_11"    
## [146] "p7_2_nom12"  "p7_2_sex12"  "p7_3_12"     "p7_4_12"     "p7_5_12"    
## [151] "p7_7_12"     "p7_2_nom13"  "p7_2_sex13"  "p7_3_13"     "p7_4_13"    
## [156] "p7_5_13"     "p7_7_13"     "p7_2_nom14"  "p7_2_sex14"  "p7_3_14"    
## [161] "p7_4_14"     "p7_5_14"     "p7_7_14"     "acuhijo"     "p8_1"       
## [166] "fac"         "anio_naci"   "cohorte"     "tercilesios" "estrato"

El comando names() nos da el nombre de las variables y su posición, lo cual nos permite “llamar” a una variable de cualquiera de las dos maneras.

head(eder[,c(75,168)])
##   sincony cohorte
## 1      SO       3
## 2      SO       3
## 3      SO       3
## 4      SO       3
## 5      SO       3
## 6      SO       3
head(eder[,c("sincony", "cohorte")])
##   sincony cohorte
## 1      SO       3
## 2      SO       3
## 3      SO       3
## 4      SO       3
## 5      SO       3
## 6      SO       3

Podemos conocer más sobre la estructura de la base de datos o sobre alguna variable concreta (tipo de variable y primeros valores).

str(eder)
## 'data.frame':    109034 obs. of  170 variables:
##  $ folio      : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ cd_a       : chr  "14" "14" "14" "14" ...
##  $ ent        : chr  "01" "01" "01" "01" ...
##  $ con        : chr  "0167" "0167" "0167" "0167" ...
##  $ upm        : chr  "00092" "00092" "00092" "00092" ...
##  $ v_sel      : chr  "02" "02" "02" "02" ...
##  $ n_hog      : chr  "1" "1" "1" "1" ...
##  $ h_mud      : chr  "0" "0" "0" "0" ...
##  $ per        : chr  "311" "311" "311" "311" ...
##  $ d_sem      : chr  "206" "206" "206" "206" ...
##  $ n_pro_viv  : chr  "0081" "0081" "0081" "0081" ...
##  $ n_ren      : chr  "02" "02" "02" "02" ...
##  $ edad_retro : int  6 7 8 9 10 11 12 13 14 15 ...
##  $ sex        : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ p1_anio    : int  1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 ...
##  $ p1_mes     : int  10 10 10 10 10 10 10 10 10 10 ...
##  $ p1_eda     : int  33 33 33 33 33 33 33 33 33 33 ...
##  $ p2_1       : chr  "AGUASCALIENTES" "AGUASCALIENTES" "AGUASCALIENTES" "AGUASCALIENTES" ...
##  $ p2_1_c     : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ p2_2       : chr  "AGUASCALIENTES" "AGUASCALIENTES" "AGUASCALIENTES" "AGUASCALIENTES" ...
##  $ p2_3       : chr  "AGUASCALIENTES" "AGUASCALIENTES" "AGUASCALIENTES" "AGUASCALIENTES" ...
##  $ p2_3_c     : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ p2_4       : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ conmig     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ acumig     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ conmign    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ acumign    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ conmigi    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ acumigi    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ sinmig     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p3_1       : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ p3_2       : int  1 1 1 1 1 1 2 2 2 92 ...
##  $ p3_3       : int  1 1 1 1 1 1 1 1 1 0 ...
##  $ p3_4_anio  : int  3 3 3 3 3 3 3 3 3 3 ...
##  $ p3_4_nivel : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ p4_1       : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ p4_3       : chr  "0" "0" "0" "0" ...
##  $ p4_4       : chr  "0" "0" "0" "0" ...
##  $ p4_4_c     : chr  "0" "0" "0" "0" ...
##  $ p4_5       : chr  "0" "0" "0" "0" ...
##  $ p4_5_c     : chr  "0" "0" "0" "0" ...
##  $ p4_6       : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p4_7       : chr  "0" "0" "0" "0" ...
##  $ p4_8       : chr  "0" "0" "0" "0" ...
##  $ p4_9       : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ conlab     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ aculab     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ camlaba    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ aculaba    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ deslabc    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ deslaba    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p5_1a_pa   : int  60 60 60 60 60 60 60 60 60 60 ...
##  $ p5_1b_pa   : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ p5_1a_ma   : int  60 60 60 60 60 60 60 60 60 60 ...
##  $ p5_1b_ma   : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ p5_2       : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ p5_3       : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_1       : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ p6_2_nom_1 : chr  "0" "0" "0" "0" ...
##  $ p6_2_anio1 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_3_nup_1 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_6_1     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_2_nom_2 : chr  "0" "0" "0" "0" ...
##  $ p6_2_anio2 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_3_nup_2 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_6_2     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_2_nom_3 : chr  "0" "0" "0" "0" ...
##  $ p6_2_anio3 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_3_nup_3 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_6_3     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_2_nom_4 : chr  "0" "0" "0" "0" ...
##  $ p6_2_anio4 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_3_nup_4 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_6_4     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ sincony    : chr  "SO" "SO" "SO" "SO" ...
##  $ p6_7_so    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_7_sa    : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p6_8       : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_1       : int  3 3 3 3 3 3 3 3 3 3 ...
##  $ p7_2_nom_1 : chr  "0" "0" "0" "0" ...
##  $ p7_2_sex_1 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_3_1     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_4_1     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_5_1     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_7_1     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_2_nom_2 : chr  "0" "0" "0" "0" ...
##  $ p7_2_sex_2 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_3_2     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_4_2     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_5_2     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_7_2     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_2_nom_3 : chr  "0" "0" "0" "0" ...
##  $ p7_2_sex_3 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_3_3     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_4_3     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_5_3     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_7_3     : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ p7_2_nom_4 : chr  "0" "0" "0" "0" ...
##  $ p7_2_sex_4 : int  0 0 0 0 0 0 0 0 0 0 ...
##   [list output truncated]
##  - attr(*, "datalabel")= chr ""
##  - attr(*, "time.stamp")= chr "28 Oct 2013 16:53"
##  - attr(*, "formats")= chr [1:170] "%8.0g" "%2s" "%2s" "%4s" ...
##  - attr(*, "types")= int [1:170] 252 2 2 4 5 2 1 1 3 3 ...
##  - attr(*, "val.labels")= chr [1:170] "" "" "" "" ...
##  - attr(*, "var.labels")= chr [1:170] "" "" "" "" ...
##  - attr(*, "expansion.fields")=List of 2
##   ..$ : chr [1:3] "_dta" "__xi__Vars__To__Drop__" "_Isex_2"
##   ..$ : chr [1:3] "_dta" "__xi__Vars__Prefix__" "_I"
##  - attr(*, "version")= int 12
##  - attr(*, "label.table")=List of 1
##   ..$ tercilesios: Named int [1:3] 1 2 3
##   .. ..- attr(*, "names")= chr [1:3] " Bajo " " Medio " " Alto "

Otros comandos para ver la estructura general de los datos:

El comando skim() pertenece al paquete skimr. Da una visión general de los datos y muestra las características de cada variable y algunas medidas resumen, agrupadas las variables por tipo.

skimr::skim(eder)
skim_type skim_variable n_missing complete_rate character.min character.max character.empty character.n_unique character.whitespace factor.ordered factor.n_unique factor.top_counts numeric.mean numeric.sd numeric.p0 numeric.p25 numeric.p50 numeric.p75 numeric.p100 numeric.hist
character cd_a 0 1 2 2 0 32 0 NA NA NA NA NA NA NA NA NA NA NA
character ent 0 1 2 2 0 32 0 NA NA NA NA NA NA NA NA NA NA NA
character con 0 1 4 4 0 556 0 NA NA NA NA NA NA NA NA NA NA NA
character upm 0 1 5 5 0 1318 0 NA NA NA NA NA NA NA NA NA NA NA
character v_sel 0 1 2 2 0 11 0 NA NA NA NA NA NA NA NA NA NA NA
character n_hog 0 1 1 1 0 4 0 NA NA NA NA NA NA NA NA NA NA NA
character h_mud 0 1 1 1 0 3 0 NA NA NA NA NA NA NA NA NA NA NA
character per 0 1 3 3 0 1 0 NA NA NA NA NA NA NA NA NA NA NA
character d_sem 0 1 3 3 0 16 0 NA NA NA NA NA NA NA NA NA NA NA
character n_pro_viv 0 1 4 4 0 301 0 NA NA NA NA NA NA NA NA NA NA NA
character n_ren 0 1 2 2 0 11 0 NA NA NA NA NA NA NA NA NA NA NA
character p2_1 0 1 2 30 0 1349 0 NA NA NA NA NA NA NA NA NA NA NA
character p2_2 0 1 2 29 0 983 0 NA NA NA NA NA NA NA NA NA NA NA
character p2_3 0 1 2 30 0 102 0 NA NA NA NA NA NA NA NA NA NA NA
character p4_3 0 1 1 120 0 8470 0 NA NA NA NA NA NA NA NA NA NA NA
character p4_4 0 1 1 73 0 4147 0 NA NA NA NA NA NA NA NA NA NA NA
character p4_4_c 0 1 1 4 0 326 0 NA NA NA NA NA NA NA NA NA NA NA
character p4_5 0 1 1 120 0 6851 0 NA NA NA NA NA NA NA NA NA NA NA
character p4_5_c 0 1 1 4 0 149 0 NA NA NA NA NA NA NA NA NA NA NA
character p4_7 0 1 1 1 0 6 0 NA NA NA NA NA NA NA NA NA NA NA
character p4_8 0 1 1 1 0 3 0 NA NA NA NA NA NA NA NA NA NA NA
character p6_2_nom_1 0 1 1 26 0 1014 0 NA NA NA NA NA NA NA NA NA NA NA
character p6_2_nom_2 0 1 1 18 0 250 0 NA NA NA NA NA NA NA NA NA NA NA
character p6_2_nom_3 0 1 1 15 0 31 0 NA NA NA NA NA NA NA NA NA NA NA
character p6_2_nom_4 0 1 1 12 0 5 0 NA NA NA NA NA NA NA NA NA NA NA
character sincony 0 1 2 2 0 11 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom_1 0 1 1 24 0 1248 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom_2 0 1 1 20 0 1086 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom_3 0 1 1 21 0 774 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom_4 0 1 1 19 0 420 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom_5 0 1 1 20 0 242 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom_6 0 1 1 17 0 124 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom_7 0 1 1 20 0 75 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom_8 0 1 1 17 0 42 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom_9 0 1 1 15 0 30 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom10 0 1 1 18 0 15 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom11 0 1 1 13 0 9 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom12 0 1 1 12 0 2 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom13 0 1 1 12 0 2 0 NA NA NA NA NA NA NA NA NA NA NA
character p7_2_nom14 0 1 1 11 0 2 0 NA NA NA NA NA NA NA NA NA NA NA
factor tercilesios 0 1 NA NA NA NA NA FALSE 3 Ba: 37363, Al: 36666, Me: 35005 NA NA NA NA NA NA NA NA
numeric folio 0 1 NA NA NA NA NA NA NA NA 1594.4313609 930.4241974 1 777 1598 2402 3200 ▇▇▇▇▇
numeric edad_retro 0 1 NA NA NA NA NA NA NA NA 26.6689198 13.7791518 6 15 25 36 62 ▇▇▆▃▂
numeric sex 0 1 NA NA NA NA NA NA NA NA 1.5110883 0.4998793 1 1 2 2 2 ▇▁▁▁▇
numeric p1_anio 0 1 NA NA NA NA NA NA NA NA 1990.3310802 13.7791518 1955 1981 1992 2002 2011 ▂▃▆▇▇
numeric p1_mes 0 1 NA NA NA NA NA NA NA NA 6.5308803 3.4229017 1 4 7 10 12 ▇▅▆▅▇
numeric p1_eda 0 1 NA NA NA NA NA NA NA NA 47.3378396 11.0325792 29 34 45 59 62 ▅▁▆▁▇
numeric p2_1_c 0 1 NA NA NA NA NA NA NA NA 10.3643176 27.9009457 1 1 1 1 99 ▇▁▁▁▁
numeric p2_3_c 0 1 NA NA NA NA NA NA NA NA 16.4097071 8.9258374 1 9 15 24 34 ▆▇▆▆▅
numeric p2_4 0 1 NA NA NA NA NA NA NA NA 1.3699672 0.4827977 1 1 1 2 2 ▇▁▁▁▅
numeric conmig 0 1 NA NA NA NA NA NA NA NA 0.0299081 0.1703346 0 0 0 0 1 ▇▁▁▁▁
numeric acumig 0 1 NA NA NA NA NA NA NA NA 0.9017096 1.3181523 0 0 0 1 13 ▇▁▁▁▁
numeric conmign 0 1 NA NA NA NA NA NA NA NA 0.0271016 0.1623804 0 0 0 0 1 ▇▁▁▁▁
numeric acumign 0 1 NA NA NA NA NA NA NA NA 0.8511657 1.2718236 0 0 0 1 13 ▇▁▁▁▁
numeric conmigi 0 1 NA NA NA NA NA NA NA NA 0.0028065 0.0529019 0 0 0 0 1 ▇▁▁▁▁
numeric acumigi 0 1 NA NA NA NA NA NA NA NA 0.0505439 0.3401111 0 0 0 0 8 ▇▁▁▁▁
numeric sinmig 0 1 NA NA NA NA NA NA NA NA 0.5179027 0.5981910 0 0 0 1 3 ▇▇▁▁▁
numeric p3_1 0 1 NA NA NA NA NA NA NA NA 1.0336042 0.1802089 1 1 1 1 2 ▇▁▁▁▁
numeric p3_2 0 1 NA NA NA NA NA NA NA NA 65.6670305 42.0032043 0 4 91 94 99 ▃▁▁▁▇
numeric p3_3 0 1 NA NA NA NA NA NA NA NA 0.2884238 0.5177829 0 0 0 1 2 ▇▁▂▁▁
numeric p3_4_anio 0 1 NA NA NA NA NA NA NA NA 3.3817617 1.6345580 0 2 3 5 9 ▂▇▃▂▁
numeric p3_4_nivel 0 1 NA NA NA NA NA NA NA NA 3.7620926 2.8455494 0 1 2 6 9 ▇▆▃▃▅
numeric p4_1 0 1 NA NA NA NA NA NA NA NA 1.0559734 0.2298713 1 1 1 1 2 ▇▁▁▁▁
numeric p4_6 0 1 NA NA NA NA NA NA NA NA 1.5690794 1.5399986 0 0 2 3 6 ▇▂▆▁▁
numeric p4_9 0 1 NA NA NA NA NA NA NA NA 0.6261166 0.9324505 0 0 0 2 9 ▇▃▁▁▁
numeric conlab 0 1 NA NA NA NA NA NA NA NA 0.0786177 0.2691423 0 0 0 0 1 ▇▁▁▁▁
numeric aculab 0 1 NA NA NA NA NA NA NA NA 1.6315920 1.7889641 0 0 1 3 17 ▇▁▁▁▁
numeric camlaba 0 1 NA NA NA NA NA NA NA NA 0.0911367 0.2878047 0 0 0 0 1 ▇▁▁▁▁
numeric aculaba 0 1 NA NA NA NA NA NA NA NA 1.8480566 1.9804696 0 0 1 3 17 ▇▂▁▁▁
numeric deslabc 0 1 NA NA NA NA NA NA NA NA 0.0125190 0.1111864 0 0 0 0 1 ▇▁▁▁▁
numeric deslaba 0 1 NA NA NA NA NA NA NA NA 0.2164646 0.4988684 0 0 0 0 6 ▇▁▁▁▁
numeric p5_1a_pa 0 1 NA NA NA NA NA NA NA NA 61.0769393 8.7610107 7 60 60 60 70 ▁▁▁▁▇
numeric p5_1b_pa 0 1 NA NA NA NA NA NA NA NA 0.7849111 1.0107134 0 0 0 2 3 ▇▁▁▅▁
numeric p5_1a_ma 0 1 NA NA NA NA NA NA NA NA 60.7831869 6.4959169 7 60 60 60 70 ▁▁▁▁▇
numeric p5_1b_ma 0 1 NA NA NA NA NA NA NA NA 0.9373498 1.0332269 0 0 0 2 3 ▇▁▁▆▁
numeric p5_2 0 1 NA NA NA NA NA NA NA NA 0.8786342 1.0274138 0 0 0 2 3 ▇▁▁▆▁
numeric p5_3 0 1 NA NA NA NA NA NA NA NA 0.1324358 0.5115814 0 0 0 0 3 ▇▁▁▁▁
numeric p6_1 0 1 NA NA NA NA NA NA NA NA 1.0283214 0.5367165 0 1 1 1 7 ▇▁▁▁▁
numeric p6_2_anio1 0 1 NA NA NA NA NA NA NA NA 1175.4930389 1550.5333045 0 0 1944 1960 9999 ▇▁▁▁▁
numeric p6_3_nup_1 0 1 NA NA NA NA NA NA NA NA 18.3294294 22.0962270 0 0 4 40 80 ▇▂▃▁▁
numeric p6_6_1 0 1 NA NA NA NA NA NA NA NA 0.8974173 1.0272917 0 0 0 2 9 ▇▆▁▁▁
numeric p6_2_anio2 0 1 NA NA NA NA NA NA NA NA 120.4275639 740.9831195 0 0 0 0 9999 ▇▁▁▁▁
numeric p6_3_nup_2 0 1 NA NA NA NA NA NA NA NA 1.1677183 7.3922254 0 0 0 0 80 ▇▁▁▁▁
numeric p6_6_2 0 1 NA NA NA NA NA NA NA NA 0.0709687 0.3817876 0 0 0 0 4 ▇▁▁▁▁
numeric p6_2_anio3 0 1 NA NA NA NA NA NA NA NA 11.7395124 254.7624148 0 0 0 0 9999 ▇▁▁▁▁
numeric p6_3_nup_3 0 1 NA NA NA NA NA NA NA NA 0.0876516 2.0793053 0 0 0 0 80 ▇▁▁▁▁
numeric p6_6_3 0 1 NA NA NA NA NA NA NA NA 0.0060256 0.1091522 0 0 0 0 3 ▇▁▁▁▁
numeric p6_2_anio4 0 1 NA NA NA NA NA NA NA NA 0.5772420 33.6904312 0 0 0 0 1984 ▇▁▁▁▁
numeric p6_3_nup_4 0 1 NA NA NA NA NA NA NA NA 0.0026047 0.1603440 0 0 0 0 10 ▇▁▁▁▁
numeric p6_6_4 0 1 NA NA NA NA NA NA NA NA 0.0005503 0.0326128 0 0 0 0 2 ▇▁▁▁▁
numeric p6_7_so 0 1 NA NA NA NA NA NA NA NA 0.0382908 0.2845319 0 0 0 0 3 ▇▁▁▁▁
numeric p6_7_sa 0 1 NA NA NA NA NA NA NA NA 0.0504888 0.3248087 0 0 0 0 3 ▇▁▁▁▁
numeric p6_8 0 1 NA NA NA NA NA NA NA NA 0.0335308 0.2653903 0 0 0 0 3 ▇▁▁▁▁
numeric p7_1 0 1 NA NA NA NA NA NA NA NA 2.6961682 1.8847467 0 2 3 4 14 ▇▇▁▁▁
numeric p7_2_sex_1 0 1 NA NA NA NA NA NA NA NA 0.7172350 0.8151498 0 0 0 1 2 ▇▁▃▁▃
numeric p7_3_1 0 1 NA NA NA NA NA NA NA NA 28.0905131 29.9304048 0 0 0 60 70 ▇▁▁▁▇
numeric p7_4_1 0 1 NA NA NA NA NA NA NA NA 0.6039309 0.7414504 0 0 0 1 9 ▇▁▁▁▁
numeric p7_5_1 0 1 NA NA NA NA NA NA NA NA 1.0521489 1.3444819 0 0 0 2 9 ▇▃▁▁▁
numeric p7_7_1 0 1 NA NA NA NA NA NA NA NA 0.7499587 0.9923636 0 0 0 2 9 ▇▅▁▁▁
numeric p7_2_sex_2 0 1 NA NA NA NA NA NA NA NA 0.5735826 0.7880277 0 0 0 1 2 ▇▁▂▁▂
numeric p7_3_2 0 1 NA NA NA NA NA NA NA NA 22.2259387 29.0097047 0 0 0 60 70 ▇▁▁▁▅
numeric p7_4_2 0 1 NA NA NA NA NA NA NA NA 0.4684410 0.6573204 0 0 0 1 9 ▇▁▁▁▁
numeric p7_5_2 0 1 NA NA NA NA NA NA NA NA 0.8152136 1.2412781 0 0 0 1 9 ▇▂▁▁▁
numeric p7_7_2 0 1 NA NA NA NA NA NA NA NA 0.6051507 0.9360567 0 0 0 2 9 ▇▃▁▁▁
numeric p7_2_sex_3 0 1 NA NA NA NA NA NA NA NA 0.3811747 0.7003198 0 0 0 1 2 ▇▁▂▁▂
numeric p7_3_3 0 1 NA NA NA NA NA NA NA NA 14.6050039 25.7240596 0 0 0 6 70 ▇▁▁▁▂
numeric p7_4_3 0 1 NA NA NA NA NA NA NA NA 0.3045931 0.5642292 0 0 0 1 9 ▇▁▁▁▁
numeric p7_5_3 0 1 NA NA NA NA NA NA NA NA 0.5475723 1.1038030 0 0 0 1 9 ▇▁▁▁▁
numeric p7_7_3 0 1 NA NA NA NA NA NA NA NA 0.4041125 0.8160434 0 0 0 0 9 ▇▂▁▁▁
numeric p7_2_sex_4 0 1 NA NA NA NA NA NA NA NA 0.1939212 0.5353578 0 0 0 0 2 ▇▁▁▁▁
numeric p7_3_4 0 1 NA NA NA NA NA NA NA NA 7.4431645 19.7797268 0 0 0 0 70 ▇▁▁▁▁
numeric p7_4_4 0 1 NA NA NA NA NA NA NA NA 0.1445512 0.4067917 0 0 0 0 9 ▇▁▁▁▁
numeric p7_5_4 0 1 NA NA NA NA NA NA NA NA 0.2906616 0.8686141 0 0 0 0 9 ▇▁▁▁▁
numeric p7_7_4 0 1 NA NA NA NA NA NA NA NA 0.2041657 0.6137241 0 0 0 0 9 ▇▁▁▁▁
numeric p7_2_sex_5 0 1 NA NA NA NA NA NA NA NA 0.0947503 0.3904726 0 0 0 0 2 ▇▁▁▁▁
numeric p7_3_5 0 1 NA NA NA NA NA NA NA NA 3.5534512 14.1760469 0 0 0 0 70 ▇▁▁▁▁
numeric p7_4_5 0 1 NA NA NA NA NA NA NA NA 0.0654658 0.2697655 0 0 0 0 9 ▇▁▁▁▁
numeric p7_5_5 0 1 NA NA NA NA NA NA NA NA 0.1425152 0.6303876 0 0 0 0 4 ▇▁▁▁▁
numeric p7_7_5 0 1 NA NA NA NA NA NA NA NA 0.0985564 0.4394173 0 0 0 0 9 ▇▁▁▁▁
numeric p7_2_sex_6 0 1 NA NA NA NA NA NA NA NA 0.0532586 0.3003477 0 0 0 0 2 ▇▁▁▁▁
numeric p7_3_6 0 1 NA NA NA NA NA NA NA NA 1.9465029 10.6840720 0 0 0 0 70 ▇▁▁▁▁
numeric p7_4_6 0 1 NA NA NA NA NA NA NA NA 0.0368692 0.2061972 0 0 0 0 2 ▇▁▁▁▁
numeric p7_5_6 0 1 NA NA NA NA NA NA NA NA 0.0798833 0.4822971 0 0 0 0 4 ▇▁▁▁▁
numeric p7_7_6 0 1 NA NA NA NA NA NA NA NA 0.0505530 0.3193742 0 0 0 0 9 ▇▁▁▁▁
numeric p7_2_sex_7 0 1 NA NA NA NA NA NA NA NA 0.0269549 0.2086730 0 0 0 0 2 ▇▁▁▁▁
numeric p7_3_7 0 1 NA NA NA NA NA NA NA NA 1.0610268 7.9132113 0 0 0 0 70 ▇▁▁▁▁
numeric p7_4_7 0 1 NA NA NA NA NA NA NA NA 0.0193059 0.1447449 0 0 0 0 2 ▇▁▁▁▁
numeric p7_5_7 0 1 NA NA NA NA NA NA NA NA 0.0468294 0.3779978 0 0 0 0 4 ▇▁▁▁▁
numeric p7_7_7 0 1 NA NA NA NA NA NA NA NA 0.0292753 0.2447724 0 0 0 0 9 ▇▁▁▁▁
numeric p7_2_sex_8 0 1 NA NA NA NA NA NA NA NA 0.0149586 0.1613516 0 0 0 0 2 ▇▁▁▁▁
numeric p7_3_8 0 1 NA NA NA NA NA NA NA NA 0.5439496 5.7249272 0 0 0 0 70 ▇▁▁▁▁
numeric p7_4_8 0 1 NA NA NA NA NA NA NA NA 0.0100519 0.1069427 0 0 0 0 2 ▇▁▁▁▁
numeric p7_5_8 0 1 NA NA NA NA NA NA NA NA 0.0216538 0.2494365 0 0 0 0 4 ▇▁▁▁▁
numeric p7_7_8 0 1 NA NA NA NA NA NA NA NA 0.0130968 0.1683804 0 0 0 0 9 ▇▁▁▁▁
numeric p7_2_sex_9 0 1 NA NA NA NA NA NA NA NA 0.0091256 0.1194578 0 0 0 0 2 ▇▁▁▁▁
numeric p7_3_9 0 1 NA NA NA NA NA NA NA NA 0.3770108 4.7435989 0 0 0 0 70 ▇▁▁▁▁
numeric p7_4_9 0 1 NA NA NA NA NA NA NA NA 0.0078508 0.1023098 0 0 0 0 2 ▇▁▁▁▁
numeric p7_5_9 0 1 NA NA NA NA NA NA NA NA 0.0132803 0.1872939 0 0 0 0 4 ▇▁▁▁▁
numeric p7_7_9 0 1 NA NA NA NA NA NA NA NA 0.0101253 0.1452024 0 0 0 0 9 ▇▁▁▁▁
numeric p7_2_sex10 0 1 NA NA NA NA NA NA NA NA 0.0043748 0.0883413 0 0 0 0 2 ▇▁▁▁▁
numeric p7_3_10 0 1 NA NA NA NA NA NA NA NA 0.1534475 3.0441399 0 0 0 0 70 ▇▁▁▁▁
numeric p7_4_10 0 1 NA NA NA NA NA NA NA NA 0.0026505 0.0514154 0 0 0 0 1 ▇▁▁▁▁
numeric p7_5_10 0 1 NA NA NA NA NA NA NA NA 0.0058422 0.1281748 0 0 0 0 4 ▇▁▁▁▁
numeric p7_7_10 0 1 NA NA NA NA NA NA NA NA 0.0041822 0.0921612 0 0 0 0 3 ▇▁▁▁▁
numeric p7_2_sex11 0 1 NA NA NA NA NA NA NA NA 0.0016875 0.0464934 0 0 0 0 2 ▇▁▁▁▁
numeric p7_3_11 0 1 NA NA NA NA NA NA NA NA 0.0829833 2.2244964 0 0 0 0 60 ▇▁▁▁▁
numeric p7_4_11 0 1 NA NA NA NA NA NA NA NA 0.0017242 0.0476610 0 0 0 0 2 ▇▁▁▁▁
numeric p7_5_11 0 1 NA NA NA NA NA NA NA NA 0.0022929 0.0708572 0 0 0 0 4 ▇▁▁▁▁
numeric p7_7_11 0 1 NA NA NA NA NA NA NA NA 0.0023754 0.0696139 0 0 0 0 3 ▇▁▁▁▁
numeric p7_2_sex12 0 1 NA NA NA NA NA NA NA NA 0.0002568 0.0160230 0 0 0 0 1 ▇▁▁▁▁
numeric p7_3_12 0 1 NA NA NA NA NA NA NA NA 0.0149128 0.9442357 0 0 0 0 60 ▇▁▁▁▁
numeric p7_4_12 0 1 NA NA NA NA NA NA NA NA 0.0002568 0.0160230 0 0 0 0 1 ▇▁▁▁▁
numeric p7_5_12 0 1 NA NA NA NA NA NA NA NA 0.0002568 0.0160230 0 0 0 0 1 ▇▁▁▁▁
numeric p7_7_12 0 1 NA NA NA NA NA NA NA NA 0.0003485 0.0267443 0 0 0 0 3 ▇▁▁▁▁
numeric p7_2_sex13 0 1 NA NA NA NA NA NA NA NA 0.0002385 0.0154403 0 0 0 0 1 ▇▁▁▁▁
numeric p7_3_13 0 1 NA NA NA NA NA NA NA NA 0.0138122 0.9086130 0 0 0 0 60 ▇▁▁▁▁
numeric p7_4_13 0 1 NA NA NA NA NA NA NA NA 0.0002385 0.0154403 0 0 0 0 1 ▇▁▁▁▁
numeric p7_5_13 0 1 NA NA NA NA NA NA NA NA 0.0002385 0.0154403 0 0 0 0 1 ▇▁▁▁▁
numeric p7_7_13 0 1 NA NA NA NA NA NA NA NA 0.0004677 0.0304320 0 0 0 0 2 ▇▁▁▁▁
numeric p7_2_sex14 0 1 NA NA NA NA NA NA NA NA 0.0002109 0.0145224 0 0 0 0 1 ▇▁▁▁▁
numeric p7_3_14 0 1 NA NA NA NA NA NA NA NA 0.0121613 0.8523895 0 0 0 0 60 ▇▁▁▁▁
numeric p7_4_14 0 1 NA NA NA NA NA NA NA NA 0.0002109 0.0145224 0 0 0 0 1 ▇▁▁▁▁
numeric p7_5_14 0 1 NA NA NA NA NA NA NA NA 0.0002109 0.0145224 0 0 0 0 1 ▇▁▁▁▁
numeric p7_7_14 0 1 NA NA NA NA NA NA NA NA 0.0004127 0.0285674 0 0 0 0 2 ▇▁▁▁▁
numeric acuhijo 0 1 NA NA NA NA NA NA NA NA 1.3881542 1.8419340 0 0 0 3 14 ▇▂▁▁▁
numeric p8_1 0 1 NA NA NA NA NA NA NA NA 1.2277363 2.1666132 0 0 0 2 9 ▇▁▂▁▁
numeric fac 0 1 NA NA NA NA NA NA NA NA 4945.3737825 3506.3556686 554 2484 4230 6472 19005 ▇▆▁▁▁
numeric anio_naci 0 1 NA NA NA NA NA NA NA NA 1963.6621604 11.0325792 1949 1952 1966 1977 1982 ▇▁▆▁▅
numeric cohorte 0 1 NA NA NA NA NA NA NA NA 1.8323734 0.8110904 1 1 2 3 3 ▇▁▆▁▅
numeric estrato 0 1 NA NA NA NA NA NA NA NA 1.9936075 0.8239652 1 1 2 3 3 ▇▁▇▁▇

El comando glimpse() pertenece al paquete dplyr. Da otra visión de los datos, mostrando tipo y una lista de valores y permite ver si tenemos etiquetas. Si dice +lbl significa que esa variable está etiquetada.

dplyr::glimpse(eder)
## Rows: 109,034
## Columns: 170
## $ folio       <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ cd_a        <chr> "14", "14", "14", "14", "14", "14", "14", "14", "14", "14"…
## $ ent         <chr> "01", "01", "01", "01", "01", "01", "01", "01", "01", "01"…
## $ con         <chr> "0167", "0167", "0167", "0167", "0167", "0167", "0167", "0…
## $ upm         <chr> "00092", "00092", "00092", "00092", "00092", "00092", "000…
## $ v_sel       <chr> "02", "02", "02", "02", "02", "02", "02", "02", "02", "02"…
## $ n_hog       <chr> "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"…
## $ h_mud       <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ per         <chr> "311", "311", "311", "311", "311", "311", "311", "311", "3…
## $ d_sem       <chr> "206", "206", "206", "206", "206", "206", "206", "206", "2…
## $ n_pro_viv   <chr> "0081", "0081", "0081", "0081", "0081", "0081", "0081", "0…
## $ n_ren       <chr> "02", "02", "02", "02", "02", "02", "02", "02", "02", "02"…
## $ edad_retro  <int> 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21…
## $ sex         <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ p1_anio     <int> 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993…
## $ p1_mes      <int> 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10…
## $ p1_eda      <int> 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33…
## $ p2_1        <chr> "AGUASCALIENTES", "AGUASCALIENTES", "AGUASCALIENTES", "AGU…
## $ p2_1_c      <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ p2_2        <chr> "AGUASCALIENTES", "AGUASCALIENTES", "AGUASCALIENTES", "AGU…
## $ p2_3        <chr> "AGUASCALIENTES", "AGUASCALIENTES", "AGUASCALIENTES", "AGU…
## $ p2_3_c      <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ p2_4        <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ conmig      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ acumig      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ conmign     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ acumign     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ conmigi     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ acumigi     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ sinmig      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p3_1        <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ p3_2        <int> 1, 1, 1, 1, 1, 1, 2, 2, 2, 92, 92, 92, 92, 92, 92, 92, 92,…
## $ p3_3        <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p3_4_anio   <int> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3…
## $ p3_4_nivel  <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ p4_1        <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ p4_3        <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p4_4        <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p4_4_c      <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p4_5        <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p4_5_c      <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p4_6        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 2…
## $ p4_7        <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p4_8        <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p4_9        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ conlab      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1…
## $ aculab      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2…
## $ camlaba     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1…
## $ aculaba     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2…
## $ deslabc     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ deslaba     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p5_1a_pa    <int> 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60…
## $ p5_1b_pa    <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p5_1a_ma    <int> 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60…
## $ p5_1b_ma    <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p5_2        <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p5_3        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_1        <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ p6_2_nom_1  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "GUILLER…
## $ p6_2_anio1  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1974, 1974, 1974, 1974, 1974…
## $ p6_3_nup_1  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 40, 40, 40, 40, 40, 40, 4…
## $ p6_6_1      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ p6_2_nom_2  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p6_2_anio2  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_3_nup_2  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_6_2      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_2_nom_3  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p6_2_anio3  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_3_nup_3  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_6_3      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_2_nom_4  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p6_2_anio4  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_3_nup_4  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_6_4      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ sincony     <chr> "SO", "SO", "SO", "SO", "SO", "SO", "SO", "SO", "SO", "SO"…
## $ p6_7_so     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_7_sa     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p6_8        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_1        <int> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3…
## $ p7_2_nom_1  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "GUILLER…
## $ p7_2_sex_1  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ p7_3_1      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 60, 60, 60, 60, 60, 60, 6…
## $ p7_4_1      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ p7_5_1      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ p7_7_1      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2…
## $ p7_2_nom_2  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex_2  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2…
## $ p7_3_2      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 60, 60, 60, 60, …
## $ p7_4_2      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1…
## $ p7_5_2      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1…
## $ p7_7_2      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2…
## $ p7_2_nom_3  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex_3  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_3      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_3      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_3      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_3      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom_4  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex_4  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_4      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_4      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_4      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_4      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom_5  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex_5  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_5      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_5      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_5      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_5      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom_6  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex_6  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_6      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_6      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_6      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_6      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom_7  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex_7  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_7      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_7      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_7      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_7      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom_8  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex_8  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_8      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_8      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_8      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_8      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom_9  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex_9  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_9      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_9      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_9      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_9      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom10  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex10  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_10     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_10     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_10     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_10     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom11  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex11  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_11     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_11     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_11     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_11     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom12  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex12  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_12     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_12     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_12     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_12     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom13  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex13  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_13     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_13     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_13     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_13     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_2_nom14  <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"…
## $ p7_2_sex14  <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_3_14     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_4_14     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_5_14     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ p7_7_14     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ acuhijo     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2…
## $ p8_1        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, 2, 0…
## $ fac         <int> 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103, 2103…
## $ anio_naci   <int> 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978, 1978…
## $ cohorte     <int> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3…
## $ tercilesios <fct>  Alto ,  Alto ,  Alto ,  Alto ,  Alto ,  Alto ,  Alto ,  A…
## $ estrato     <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3…

Paréntesis: uso de pipes

Los pipes (%>%) implican un formato diferente (más intuitivo) para pedir cosas a R. Funcionan como tuberías y encadenan comandos.

Mediante el uso de pipes podemos escribir funciones encadenadas, de manera que el comando siguiente se aplica sobre el resultado de la operación que hayamos hecho previamente sobre la base (sobre el resultado del comando anterior).

Para usar pipes debemos activar la librería dplyr.

library(dplyr)

Para escribir los pipes (%>%) se apreta: Ctrl+Shift+m (shortcut)

Por ejemplo, en lugar de pedir names(eder), usando pipes sería:

eder %>% 
  names()
##   [1] "folio"       "cd_a"        "ent"         "con"         "upm"        
##   [6] "v_sel"       "n_hog"       "h_mud"       "per"         "d_sem"      
##  [11] "n_pro_viv"   "n_ren"       "edad_retro"  "sex"         "p1_anio"    
##  [16] "p1_mes"      "p1_eda"      "p2_1"        "p2_1_c"      "p2_2"       
##  [21] "p2_3"        "p2_3_c"      "p2_4"        "conmig"      "acumig"     
##  [26] "conmign"     "acumign"     "conmigi"     "acumigi"     "sinmig"     
##  [31] "p3_1"        "p3_2"        "p3_3"        "p3_4_anio"   "p3_4_nivel" 
##  [36] "p4_1"        "p4_3"        "p4_4"        "p4_4_c"      "p4_5"       
##  [41] "p4_5_c"      "p4_6"        "p4_7"        "p4_8"        "p4_9"       
##  [46] "conlab"      "aculab"      "camlaba"     "aculaba"     "deslabc"    
##  [51] "deslaba"     "p5_1a_pa"    "p5_1b_pa"    "p5_1a_ma"    "p5_1b_ma"   
##  [56] "p5_2"        "p5_3"        "p6_1"        "p6_2_nom_1"  "p6_2_anio1" 
##  [61] "p6_3_nup_1"  "p6_6_1"      "p6_2_nom_2"  "p6_2_anio2"  "p6_3_nup_2" 
##  [66] "p6_6_2"      "p6_2_nom_3"  "p6_2_anio3"  "p6_3_nup_3"  "p6_6_3"     
##  [71] "p6_2_nom_4"  "p6_2_anio4"  "p6_3_nup_4"  "p6_6_4"      "sincony"    
##  [76] "p6_7_so"     "p6_7_sa"     "p6_8"        "p7_1"        "p7_2_nom_1" 
##  [81] "p7_2_sex_1"  "p7_3_1"      "p7_4_1"      "p7_5_1"      "p7_7_1"     
##  [86] "p7_2_nom_2"  "p7_2_sex_2"  "p7_3_2"      "p7_4_2"      "p7_5_2"     
##  [91] "p7_7_2"      "p7_2_nom_3"  "p7_2_sex_3"  "p7_3_3"      "p7_4_3"     
##  [96] "p7_5_3"      "p7_7_3"      "p7_2_nom_4"  "p7_2_sex_4"  "p7_3_4"     
## [101] "p7_4_4"      "p7_5_4"      "p7_7_4"      "p7_2_nom_5"  "p7_2_sex_5" 
## [106] "p7_3_5"      "p7_4_5"      "p7_5_5"      "p7_7_5"      "p7_2_nom_6" 
## [111] "p7_2_sex_6"  "p7_3_6"      "p7_4_6"      "p7_5_6"      "p7_7_6"     
## [116] "p7_2_nom_7"  "p7_2_sex_7"  "p7_3_7"      "p7_4_7"      "p7_5_7"     
## [121] "p7_7_7"      "p7_2_nom_8"  "p7_2_sex_8"  "p7_3_8"      "p7_4_8"     
## [126] "p7_5_8"      "p7_7_8"      "p7_2_nom_9"  "p7_2_sex_9"  "p7_3_9"     
## [131] "p7_4_9"      "p7_5_9"      "p7_7_9"      "p7_2_nom10"  "p7_2_sex10" 
## [136] "p7_3_10"     "p7_4_10"     "p7_5_10"     "p7_7_10"     "p7_2_nom11" 
## [141] "p7_2_sex11"  "p7_3_11"     "p7_4_11"     "p7_5_11"     "p7_7_11"    
## [146] "p7_2_nom12"  "p7_2_sex12"  "p7_3_12"     "p7_4_12"     "p7_5_12"    
## [151] "p7_7_12"     "p7_2_nom13"  "p7_2_sex13"  "p7_3_13"     "p7_4_13"    
## [156] "p7_5_13"     "p7_7_13"     "p7_2_nom14"  "p7_2_sex14"  "p7_3_14"    
## [161] "p7_4_14"     "p7_5_14"     "p7_7_14"     "acuhijo"     "p8_1"       
## [166] "fac"         "anio_naci"   "cohorte"     "tercilesios" "estrato"

O en lugar de pedir dim(eder), con pipes sería:

eder %>% 
  dim()
## [1] 109034    170

Encadenando varios comandos:

length(names(eder))
## [1] 170
eder %>% 
  names() %>% 
  length()
## [1] 170

Ambas formas de pedir la información son equivalentes. Luego veremos que cuando los comandos se vuelven más complejos, el uso de pipes simplifica bastante.


b. Exploración de variables

Como regla general para acceder a una variable debo indicar primero el nombre de la base de datos y mediado por $ el nombre de la variable.

eder$edad_retro
str(eder$edad_retro)
##  int [1:109034] 6 7 8 9 10 11 12 13 14 15 ...
str(eder$sex)
##  int [1:109034] 2 2 2 2 2 2 2 2 2 2 ...
class(eder$ent)
## [1] "character"
class(eder$edad_retro)
## [1] "integer"
class(eder$tercilesios)
## [1] "factor"

Podemos ver si una variable es de tipo caracter, numérica o factor.

Es importante evaluar si una variable tiene valores faltantes.

is.na(eder$edad_retro)
sum(is.na(eder$edad_retro))
## [1] 0

No hay ningún valor faltante.

Veamos cómo sería si lo hubiera. Asignamos un missing a un valor de la base en la variable edad_retro.

eder$edad_retro[5]
## [1] 10

Verificamos previamente cuál es el valor de edad_retro en la fila 5.

eder$edad_retro[5] <- NA
sum(is.na(eder$edad_retro))
## [1] 1

Ahora nos aparece que hay un valor faltante. Le podemos pedir la posición de ese valor faltante en la base.

which(is.na(eder$edad_retro))
## [1] 5

El valor faltante está en la fila 5.

Corregimos el valor.

eder$edad_retro[5] <- 10

b.1. Medidas descriptivas básicas para variables numéricas

El comando summary() arroja algunas medidas resumen:

summary(eder$edad_retro)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    6.00   15.00   25.00   26.67   36.00   62.00

Con el comando subset podemos indicar una población específica (las condiciones para definirla) sobre la que queremos que calcule las medidas resumen.

summary(subset(eder$edad_retro, eder$sex ==1))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    6.00   15.00   25.00   26.71   36.00   62.00
summary(subset(eder$edad_retro, eder$sex ==2))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    6.00   15.00   25.00   26.63   36.00   62.00

Con el comando by podemos pedir que calcule las medidas resumen para cada grupo por separado (para cada categoría de una variable).

by(eder$edad_retro, eder$sex, summary)
## eder$sex: 1
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    6.00   15.00   25.00   26.71   36.00   62.00 
## ------------------------------------------------------------ 
## eder$sex: 2
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    6.00   15.00   25.00   26.63   36.00   62.00

El comando dfSummary() da un resumen más amplio de la variable, que indica también cuántos missing tiene. Pertenece a la librería summarytools.

if (!require("summarytools")) install.packages("summarytools")
library(summarytools)
dfSummary(eder$edad_retro)
## Data Frame Summary  
## eder  
## Dimensions: 109034 x 1  
## Duplicates: 108977  
## 
## -----------------------------------------------------------------------------------------------------------
## No   Variable     Stats / Values            Freqs (% of Valid)   Graph                 Valid      Missing  
## ---- ------------ ------------------------- -------------------- --------------------- ---------- ---------
## 1    edad_retro   Mean (sd) : 26.7 (13.8)   57 distinct values   : :   : .             109034     0        
##      [numeric]    min < med < max:                               : : : : :             (100.0%)   (0.0%)   
##                   6 < 25 < 62                                    : : : : : . :                             
##                   IQR (CV) : 21 (0.5)                            : : : : : : : . .                         
##                                                                  : : : : : : : : : :                       
## -----------------------------------------------------------------------------------------------------------

Podemos pedir las medidas resumen para los casos que cumplen determinadas condiciones (para la base filtrada). Ejemplo: promedio de edad para cada sexo y cada cohorte.

mean(eder$edad_retro[eder$sex==1 & eder$cohorte ==1])
## [1] 32.48209
mean(eder$edad_retro[eder$sex==2 & eder$cohorte ==1])
## [1] 32.45933
mean(eder$edad_retro[eder$sex==1 & eder$cohorte ==2])
## [1] 25.0644
mean(eder$edad_retro[eder$sex==2 & eder$cohorte ==2])
## [1] 25.05362
mean(eder$edad_retro[eder$sex==1 & eder$cohorte ==3])
## [1] 19.03931
mean(eder$edad_retro[eder$sex==2 & eder$cohorte ==3])
## [1] 19.09074

El primer promedio con pipes se podría pedir así:

eder %>% 
  filter(sex == 1, cohorte == 1) %>% 
  summarise(prom_edad = mean(edad_retro))
##   prom_edad
## 1  32.48209

Al usar el pipe se indica la base una única vez y se van encadenando comandos. El comando filter sirve para indicar el filtro que queremos que aplique sobre la base declarada previamente y después se indica la operación que debe realizar sobre la base filtrada (el promedio de la edad).

Usando pipes podemos obtener todos los promedios con un solo comando:

eder %>%
  group_by(cohorte, sex) %>%
  summarise(prom_edad = mean(edad_retro, na.rm = TRUE)) %>% 
  ungroup()
## # A tibble: 6 × 3
##   cohorte   sex prom_edad
##     <int> <int>     <dbl>
## 1       1     1      32.5
## 2       1     2      32.5
## 3       2     1      25.1
## 4       2     2      25.1
## 5       3     1      19.0
## 6       3     2      19.1

El comando group_by permite agrupar los casos según las categorías de las variables indicadas. Con el comando siguiente del pipe calcula el promedio de la edad para cada grupo por separado. El comando ungroup() al final sirve para deshacer esta agrupación y que no la tome en cuenta en operaciones posteriores.

Podemos ver cuáles son las edades máximas en cada cohorte:

max(eder$edad_retro[eder$cohorte ==1])
## [1] 62
max(eder$edad_retro[eder$cohorte ==2])
## [1] 47
max(eder$edad_retro[eder$cohorte ==3])
## [1] 35

O en un solo comando con pipes:

eder %>%
  group_by(cohorte) %>%
  summarise(max_edad = max(edad_retro, na.rm = TRUE)) %>% 
  ungroup()
## # A tibble: 3 × 2
##   cohorte max_edad
##     <int>    <dbl>
## 1       1       62
## 2       2       47
## 3       3       35

Dado que no hay valores faltantes en la base no es necesario añadir la condición na.rm=TRUE, pero en caso de que hubiera, permitiría que calculara el promedio sin tenerlos en cuenta.

Con la función summarise podemos hacer varias operaciones a la vez y sobre distintas variables de la misma base. Por ejemplo, para la primera cohorte calculamos el promedio, el mínimo, el máximo y la mediana de la edad, el número total de casos y el número de categorías para la variable estrato.

eder %>% 
  filter(cohorte == 1) %>% 
  summarise(prom_edad = round(mean(edad_retro),2),
            min_edad = min(edad_retro),
            max_edad = max(edad_retro),
            med_edad = median(edad_retro),
            n_obs = n(),
            n_estrato = n_distinct(estrato))
##   prom_edad min_edad max_edad med_edad n_obs n_estrato
## 1     32.47        6       62       32 46535         3

Podemos hacer lo mismo para varios grupos de casos, por ejemplo, distinguiendo por cohorte y sexo.

eder %>%
  group_by(cohorte, sex) %>%
  summarise(prom_edad = mean(edad_retro),
            min_edad = min(edad_retro),
            max_edad = max(edad_retro),
            med_edad = median(edad_retro),
            n_obs = n(),
            n_estrato = n_distinct(estrato)) %>% 
  ungroup()
## # A tibble: 6 × 8
##   cohorte   sex prom_edad min_edad max_edad med_edad n_obs n_estrato
##     <int> <int>     <dbl>    <dbl>    <dbl>    <dbl> <int>     <int>
## 1       1     1      32.5        6       62       32 22981         3
## 2       1     2      32.5        6       62       32 23554         3
## 3       2     1      25.1        6       47       25 16616         3
## 4       2     2      25.1        6       47       25 17625         3
## 5       3     1      19.0        6       35       19 13711         3
## 6       3     2      19.1        6       35       19 14547         3
Medidas de posición

Si queremos obtener los cuantiles de una variable, podemos usar el comando quantile.

quantile(eder$edad_retro, na.rm = TRUE)
##   0%  25%  50%  75% 100% 
##    6   15   25   36   62

Por defecto arroja cuartiles. Con la opción seq podemos indicar si queremos deciles, quintiles o cualquier otro tipo de cuantil.

quantile(eder$edad_retro, seq(0, 1, 0.1), na.rm = TRUE)
##   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##    6    9   13   17   21   25   29   33   39   47   62
quantile(eder$edad_retro, seq(0, 1, 0.2), na.rm = TRUE)
##   0%  20%  40%  60%  80% 100% 
##    6   13   21   29   39   62

Si queremos calcularlos por separado para cada sexo, podríamos hacerlo así.

quantile(subset(eder$edad_retro, eder$sex == "1"))
##   0%  25%  50%  75% 100% 
##    6   15   25   36   62
quantile(subset(eder$edad_retro, eder$sex == "2"))
##   0%  25%  50%  75% 100% 
##    6   15   25   36   62
quantile(subset(eder$edad_retro, eder$sex == "1"), seq(0, 1, 0.1))
##   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##    6    9   13   17   21   25   29   33   40   47   62
quantile(subset(eder$edad_retro, eder$sex == "2"), seq(0, 1, 0.1))
##   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##    6    9   13   17   21   25   29   33   39   47   62
quantile(subset(eder$edad_retro, eder$sex == "1"), seq(0,1, 0.2))
##   0%  20%  40%  60%  80% 100% 
##    6   13   21   29   40   62
quantile(subset(eder$edad_retro, eder$sex == "2"), seq(0,1, 0.2))
##   0%  20%  40%  60%  80% 100% 
##    6   13   21   29   39   62

O podríamos usar el comando by que vimos antes:

by(eder$edad_retro, eder$sex, quantile, na.rm = TRUE)
## eder$sex: 1
##   0%  25%  50%  75% 100% 
##    6   15   25   36   62 
## ------------------------------------------------------------ 
## eder$sex: 2
##   0%  25%  50%  75% 100% 
##    6   15   25   36   62
by(eder$edad_retro, eder$sex, quantile, probs = seq(0, 1, 0.1), na.rm = TRUE)
## eder$sex: 1
##   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##    6    9   13   17   21   25   29   33   40   47   62 
## ------------------------------------------------------------ 
## eder$sex: 2
##   0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
##    6    9   13   17   21   25   29   33   39   47   62

b.2. Medidas descriptivas básicas para variables categóricas

Es importante tener en cuenta la clase de variable que estamos manejando. Las variables categóricas a veces vienen dispuestas como variables de tipo caracter, otras veces son variables de tipo factor y a menudo están creadas como variables numéricas. Cuando obtenemos un summary, vemos las diferencias en lo que nos arroja en cada caso.

Una variable de tipo factor es una variable declarada como categórica con distintos niveles. Esos niveles están declarados explícitamente y los podemos ver con el comando levels.

class(eder$tercilesios)
## [1] "factor"
levels(eder$tercilesios)
## [1] " Bajo "  " Medio " " Alto "
summary(eder$tercilesios)
##   Bajo   Medio    Alto  
##   37363   35005   36666

Para variables de tipo caracter summary no arroja resultados; sólo indica que es una variable de tipo caracter y el número de casos.

class(eder$ent)
## [1] "character"
summary(eder$ent)
##    Length     Class      Mode 
##    109034 character character
unique(eder$ent)
##  [1] "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" "14" "15"
## [16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
## [31] "31" "32"

El comando unique() nos permite saber cuáles son los distintos valores que asume esa variable de tipo caracter.

Podemos transformarla en una variable de tipo factor.

eder$ent_f <- as.factor(eder$ent)
levels(eder$ent_f)
##  [1] "01" "02" "03" "04" "05" "06" "07" "08" "09" "10" "11" "12" "13" "14" "15"
## [16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
## [31] "31" "32"
summary(eder$ent_f)
##   01   02   03   04   05   06   07   08   09   10   11   12   13   14   15   16 
## 3295 2861 3074 2864 3831 3225 3517 2964 4374 2609 4811 2666 2893 4416 6379 3004 
##   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32 
## 3024 3319 4539 3132 5148 3404 2282 3172 2891 3031 3646 2453 3138 2616 3320 3136

Para variables categóricas pero que están presentadas como numéricas, summary arroja resultados, pero su sentido no es interpretable. Por ejemplo, la variable cohorte es una variable categórica con tres niveles, pero figura en la base como variable numérica.

class(eder$cohorte)
## [1] "integer"
summary(eder$cohorte)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   1.000   2.000   1.832   3.000   3.000

¿Qué significa que el promedio de la variable sea 1.832?

Podemos transformarla en una variable de tipo factor y la interpretación del summary ya será posible como la de una variable categórica.

eder$cohorte_f <- as.factor(eder$cohorte)
levels(eder$cohorte_f)
## [1] "1" "2" "3"
summary(eder$cohorte_f)
##     1     2     3 
## 46535 34241 28258
Tablas de frecuencias y tablas de contingencia

Para cualquier variable categórica, independientemente del tipo que sea en la base, podemos obtener frecuencias y tablas de contingencia.

table(eder$sex)
## 
##     1     2 
## 53308 55726
table(eder$cohorte)
## 
##     1     2     3 
## 46535 34241 28258
table(eder$cohorte_f)
## 
##     1     2     3 
## 46535 34241 28258

Al obtener tablas de contingencia, las podemos obtener con frecuencias absolutas o relativas.

table(eder$sex, eder$cohorte)
##    
##         1     2     3
##   1 22981 16616 13711
##   2 23554 17625 14547

Podemos añadir los marginales (los totales por fila y por columna) con el comando addmargins.

addmargins(table(eder$sex, eder$cohorte))
##      
##            1      2      3    Sum
##   1    22981  16616  13711  53308
##   2    23554  17625  14547  55726
##   Sum  46535  34241  28258 109034

Para obtener las frecuencias relativas, podemos hacerlo directamente o guardando la tabla como un objeto y pidiendo las proporciones de esa tabla. Si indicamos la opción 1, saca las proporciones por cada categoría de las filas (=row).

tabla1 <- table(eder$sex, eder$cohorte)
prop.table(tabla1,1)
##    
##             1         2         3
##   1 0.4310985 0.3116981 0.2572034
##   2 0.4226752 0.3162797 0.2610451

Si queremos mostrarlo en porcentaje y redondeando a un decimal:

round(prop.table(tabla1,1)*100, 1)
##    
##        1    2    3
##   1 43.1 31.2 25.7
##   2 42.3 31.6 26.1
addmargins(round(prop.table(tabla1,1)*100, 1), 2)
##    
##         1     2     3   Sum
##   1  43.1  31.2  25.7 100.0
##   2  42.3  31.6  26.1 100.0

Si lo queremos hacer directamente, sin crear el objeto:

round(prop.table(table(eder$sex, eder$cohorte),1)*100,1)
##    
##        1    2    3
##   1 43.1 31.2 25.7
##   2 42.3 31.6 26.1

Si indicamos la opción 2, saca las proporciones por cada categoría de las columnas (=col).

round(prop.table(tabla1,2)*100,1)
##    
##        1    2    3
##   1 49.4 48.5 48.5
##   2 50.6 51.5 51.5
addmargins(round(prop.table(tabla1,2)*100,1),1)
##      
##           1     2     3
##   1    49.4  48.5  48.5
##   2    50.6  51.5  51.5
##   Sum 100.0 100.0 100.0

Si no indicamos ninguna opción, saca las proporciones por cada celda (=cell).

round(prop.table(tabla1)*100,1)
##    
##        1    2    3
##   1 21.1 15.2 12.6
##   2 21.6 16.2 13.3
addmargins(round(prop.table(tabla1)*100,1))
##      
##           1     2     3   Sum
##   1    21.1  15.2  12.6  48.9
##   2    21.6  16.2  13.3  51.1
##   Sum  42.7  31.4  25.9 100.0

Vamos a ver cómo se verían las tablas si tuviéramos valores faltantes en alguna de las variables.

eder$sex[5] <- NA
eder$sex[50] <- NA

Si no indicamos nada, no aparecen missing, aunque los haya. Tenemos que pedir que muestre los valores faltantes.

table(eder$sex)
## 
##     1     2 
## 53308 55724

Si indicamos “ifany”, muestra la categoría NA sólo si hay missing. Como la variable cohorte no tiene missing, no aparece la categoría NA.

table(eder$sex, useNA="ifany")
## 
##     1     2  <NA> 
## 53308 55724     2
table(eder$cohorte, useNA="ifany")
## 
##     1     2     3 
## 46535 34241 28258

Si indicamos “always”, muestra la categoría NA haya o no missing.

table(eder$sex, useNA="always")
## 
##     1     2  <NA> 
## 53308 55724     2
table(eder$cohorte, useNA="always")
## 
##     1     2     3  <NA> 
## 46535 34241 28258     0

En la tabla de contingencia:

table(eder$sex, eder$cohorte, useNA="ifany")
##       
##            1     2     3
##   1    22981 16616 13711
##   2    23553 17625 14546
##   <NA>     1     0     1
round(prop.table(table(eder$sex, eder$cohorte, useNA="ifany"),1)*100, 1)
##       
##           1    2    3
##   1    43.1 31.2 25.7
##   2    42.3 31.6 26.1
##   <NA> 50.0  0.0 50.0

Volvemos a asignar los valores a los casos.

eder$sex[5] <- 2
eder$sex[50] <- 2

Podemos sacar también tablas cruzadas con tres variables:

table(eder$cohorte, eder$estrato, eder$sex)
## , ,  = 1
## 
##    
##        1    2    3
##   1 7826 7884 7271
##   2 5949 5008 5659
##   3 4235 4517 4959
## 
## , ,  = 2
## 
##    
##        1    2    3
##   1 8574 6681 8299
##   2 5941 5971 5713
##   3 4838 4944 4765
tabla2 <- table(eder$cohorte, eder$estrato, eder$sex)

Muestra la tabla de contingencia de cohorte y estrato para cada sexo por separado.

round(prop.table(tabla2,2)*100,1)
## , ,  = 1
## 
##    
##        1    2    3
##   1 20.9 22.5 19.8
##   2 15.9 14.3 15.4
##   3 11.3 12.9 13.5
## 
## , ,  = 2
## 
##    
##        1    2    3
##   1 22.9 19.1 22.6
##   2 15.9 17.1 15.6
##   3 12.9 14.1 13.0

Al pedir las frecuencias relativas en este caso, calcula los porcentajes por columna (para cada estrato), teniendo en cuenta ambos sexos. El 100% es la suma de todos los valores de cada cohorte y sexo.

Si queremos todo en una misma tabla, sin que la arroje por separado, usamos ftable, pero para obtener el mismo resultado hay que ordenar las variables de otra manera en el comando.

ftable(eder [,c("sex","cohorte","estrato")])
##             estrato    1    2    3
## sex cohorte                       
## 1   1               7826 7884 7271
##     2               5949 5008 5659
##     3               4235 4517 4959
## 2   1               8574 6681 8299
##     2               5941 5971 5713
##     3               4838 4944 4765
tabla3 <- ftable(eder [,c("sex","cohorte","estrato")])
round(prop.table(tabla3,2)*100,1)
##             estrato    1    2    3
## sex cohorte                       
## 1   1               20.9 22.5 19.8
##     2               15.9 14.3 15.4
##     3               11.3 12.9 13.5
## 2   1               22.9 19.1 22.6
##     2               15.9 17.1 15.6
##     3               12.9 14.1 13.0

4. Manejo y modificación de BBDD

a. Generar sub-bases

Podemos generar sub-bases seleccionando un conjunto más reducido de casos (observaciones) o también seleccionando un conjunto más reducido de variables. Es decir, podemos recortar por filas o por columnas.

Recordemos cuántas filas y cuántas columnas tiene nuestra base:

dim(eder)
## [1] 109034    172

Tenemos 109,034 filas (observaciones) y 172 columnas (variables).

Podemos crear una sub-base que incluya sólo a las cohortes 1 y 2 (es decir, que excluya a la cohorte 3).

eder12 <- eder[eder$cohorte < 3, ]

Para ello indicamos la condición para la selección de casos en la primera parte del paréntesis y dejamos un espacio tras la coma. Eso implica que la sub-base mantendrá todas las variables de la base original.

table(eder12$cohorte)
## 
##     1     2 
## 46535 34241
table(eder$cohorte)
## 
##     1     2     3 
## 46535 34241 28258
dim(eder12)
## [1] 80776   172

La sub-base eder12 tiene 80,776 filas y la variable cohorte únicamente adopta los valores 1 y 2.

Con el comando subset podemos obtener el mismo resultado.

eder12s <- subset(eder, cohorte < 3)
dim(eder12s)
## [1] 80776   172

Si quisiéramos hacer la misma operación con pipes, utilizaríamos la función filter.

eder12f <- eder %>%
  filter(cohorte < 3)
dim(eder12f)
## [1] 80776   172

La EDER tiene por filas los años-persona de cada individuo entrevistado; es decir, la información está recogida para cada año desde que nació hasta el momento de la encuesta (2011).

head(eder[,c("folio","edad_retro","p1_anio","anio_naci")],82)
##    folio edad_retro p1_anio anio_naci
## 1      1          6    1984      1978
## 2      1          7    1985      1978
## 3      1          8    1986      1978
## 4      1          9    1987      1978
## 5      1         10    1988      1978
## 6      1         11    1989      1978
## 7      1         12    1990      1978
## 8      1         13    1991      1978
## 9      1         14    1992      1978
## 10     1         15    1993      1978
## 11     1         16    1994      1978
## 12     1         17    1995      1978
## 13     1         18    1996      1978
## 14     1         19    1997      1978
## 15     1         20    1998      1978
## 16     1         21    1999      1978
## 17     1         22    2000      1978
## 18     1         23    2001      1978
## 19     1         24    2002      1978
## 20     1         25    2003      1978
## 21     1         26    2004      1978
## 22     1         27    2005      1978
## 23     1         28    2006      1978
## 24     1         29    2007      1978
## 25     1         30    2008      1978
## 26     1         31    2009      1978
## 27     1         32    2010      1978
## 28     1         33    2011      1978
## 29     2          6    1958      1952
## 30     2          7    1959      1952
## 31     2          8    1960      1952
## 32     2          9    1961      1952
## 33     2         10    1962      1952
## 34     2         11    1963      1952
## 35     2         12    1964      1952
## 36     2         13    1965      1952
## 37     2         14    1966      1952
## 38     2         15    1967      1952
## 39     2         16    1968      1952
## 40     2         17    1969      1952
## 41     2         18    1970      1952
## 42     2         19    1971      1952
## 43     2         20    1972      1952
## 44     2         21    1973      1952
## 45     2         22    1974      1952
## 46     2         23    1975      1952
## 47     2         24    1976      1952
## 48     2         25    1977      1952
## 49     2         26    1978      1952
## 50     2         27    1979      1952
## 51     2         28    1980      1952
## 52     2         29    1981      1952
## 53     2         30    1982      1952
## 54     2         31    1983      1952
## 55     2         32    1984      1952
## 56     2         33    1985      1952
## 57     2         34    1986      1952
## 58     2         35    1987      1952
## 59     2         36    1988      1952
## 60     2         37    1989      1952
## 61     2         38    1990      1952
## 62     2         39    1991      1952
## 63     2         40    1992      1952
## 64     2         41    1993      1952
## 65     2         42    1994      1952
## 66     2         43    1995      1952
## 67     2         44    1996      1952
## 68     2         45    1997      1952
## 69     2         46    1998      1952
## 70     2         47    1999      1952
## 71     2         48    2000      1952
## 72     2         49    2001      1952
## 73     2         50    2002      1952
## 74     2         51    2003      1952
## 75     2         52    2004      1952
## 76     2         53    2005      1952
## 77     2         54    2006      1952
## 78     2         55    2007      1952
## 79     2         56    2008      1952
## 80     2         57    2009      1952
## 81     2         58    2010      1952
## 82     2         59    2011      1952

En esta base hemos acotado los registros a partir de los 6 años.

Para crear una base de individuos, podemos seleccionar los años-persona correspondientes al momento de la encuesta (2011) y tener la información de cada individuo en el último año disponible.

eder_ind <- eder[eder$p1_anio == 2011, ]
head(eder_ind[,c("folio","edad_retro","p1_anio","anio_naci")],15)
##     folio edad_retro p1_anio anio_naci
## 28      1         33    2011      1978
## 82      2         59    2011      1952
## 137     3         60    2011      1951
## 175     4         43    2011      1968
## 203     5         33    2011      1978
## 257     6         59    2011      1952
## 285     7         33    2011      1978
## 313    10         33    2011      1978
## 341    12         33    2011      1978
## 380    13         44    2011      1967
## 408    14         33    2011      1978
## 461    15         58    2011      1953
## 514    16         58    2011      1953
## 540    17         31    2011      1980
## 580    18         45    2011      1966
dim(eder_ind)
## [1] 2782  172

Ahora tenemos un único registro (fila) por individuo. En la base de individuos tenemos 2,782 casos.

Ahora veamos cómo acotar la base eder12 (la base sin la cohorte 3, la más joven) al rango de edad entre 12 y 40 años.

dim(eder12)
## [1] 80776   172
eder12 %>%
  group_by(cohorte) %>%
  summarise(min_edad = min(edad_retro, na.rm = TRUE),
            max_edad = max(edad_retro, na.rm = TRUE)) %>% 
  ungroup()
## # A tibble: 2 × 3
##   cohorte min_edad max_edad
##     <int>    <dbl>    <dbl>
## 1       1        6       62
## 2       2        6       47

En la cohorte 1 la edad máxima es de 62 años y en la cohorte 2 es de 47 años.

head(eder12[,c("folio","edad_retro","p1_anio","anio_naci")],109)
##     folio edad_retro p1_anio anio_naci
## 29      2          6    1958      1952
## 30      2          7    1959      1952
## 31      2          8    1960      1952
## 32      2          9    1961      1952
## 33      2         10    1962      1952
## 34      2         11    1963      1952
## 35      2         12    1964      1952
## 36      2         13    1965      1952
## 37      2         14    1966      1952
## 38      2         15    1967      1952
## 39      2         16    1968      1952
## 40      2         17    1969      1952
## 41      2         18    1970      1952
## 42      2         19    1971      1952
## 43      2         20    1972      1952
## 44      2         21    1973      1952
## 45      2         22    1974      1952
## 46      2         23    1975      1952
## 47      2         24    1976      1952
## 48      2         25    1977      1952
## 49      2         26    1978      1952
## 50      2         27    1979      1952
## 51      2         28    1980      1952
## 52      2         29    1981      1952
## 53      2         30    1982      1952
## 54      2         31    1983      1952
## 55      2         32    1984      1952
## 56      2         33    1985      1952
## 57      2         34    1986      1952
## 58      2         35    1987      1952
## 59      2         36    1988      1952
## 60      2         37    1989      1952
## 61      2         38    1990      1952
## 62      2         39    1991      1952
## 63      2         40    1992      1952
## 64      2         41    1993      1952
## 65      2         42    1994      1952
## 66      2         43    1995      1952
## 67      2         44    1996      1952
## 68      2         45    1997      1952
## 69      2         46    1998      1952
## 70      2         47    1999      1952
## 71      2         48    2000      1952
## 72      2         49    2001      1952
## 73      2         50    2002      1952
## 74      2         51    2003      1952
## 75      2         52    2004      1952
## 76      2         53    2005      1952
## 77      2         54    2006      1952
## 78      2         55    2007      1952
## 79      2         56    2008      1952
## 80      2         57    2009      1952
## 81      2         58    2010      1952
## 82      2         59    2011      1952
## 83      3          6    1957      1951
## 84      3          7    1958      1951
## 85      3          8    1959      1951
## 86      3          9    1960      1951
## 87      3         10    1961      1951
## 88      3         11    1962      1951
## 89      3         12    1963      1951
## 90      3         13    1964      1951
## 91      3         14    1965      1951
## 92      3         15    1966      1951
## 93      3         16    1967      1951
## 94      3         17    1968      1951
## 95      3         18    1969      1951
## 96      3         19    1970      1951
## 97      3         20    1971      1951
## 98      3         21    1972      1951
## 99      3         22    1973      1951
## 100     3         23    1974      1951
## 101     3         24    1975      1951
## 102     3         25    1976      1951
## 103     3         26    1977      1951
## 104     3         27    1978      1951
## 105     3         28    1979      1951
## 106     3         29    1980      1951
## 107     3         30    1981      1951
## 108     3         31    1982      1951
## 109     3         32    1983      1951
## 110     3         33    1984      1951
## 111     3         34    1985      1951
## 112     3         35    1986      1951
## 113     3         36    1987      1951
## 114     3         37    1988      1951
## 115     3         38    1989      1951
## 116     3         39    1990      1951
## 117     3         40    1991      1951
## 118     3         41    1992      1951
## 119     3         42    1993      1951
## 120     3         43    1994      1951
## 121     3         44    1995      1951
## 122     3         45    1996      1951
## 123     3         46    1997      1951
## 124     3         47    1998      1951
## 125     3         48    1999      1951
## 126     3         49    2000      1951
## 127     3         50    2001      1951
## 128     3         51    2002      1951
## 129     3         52    2003      1951
## 130     3         53    2004      1951
## 131     3         54    2005      1951
## 132     3         55    2006      1951
## 133     3         56    2007      1951
## 134     3         57    2008      1951
## 135     3         58    2009      1951
## 136     3         59    2010      1951
## 137     3         60    2011      1951

Por ejemplo, al primer individuo lo tenemos registrado entre sus 6 y sus 59 años y al segundo entre sus 6 y sus 60 años.

eder12_red <- eder12[eder12$edad_retro < 41 & eder12$edad_retro > 11, ]
dim(eder12_red)
## [1] 50431   172

Pasamos de 80,776 filas (años-persona) a 50,431.

eder12_red %>%
  group_by(cohorte) %>%
  summarise(min_edad = min(edad_retro, na.rm = TRUE),
            max_edad = max(edad_retro, na.rm = TRUE)) %>% 
  ungroup()
## # A tibble: 2 × 3
##   cohorte min_edad max_edad
##     <int>    <dbl>    <dbl>
## 1       1       12       40
## 2       2       12       40

Ahora los registros en las dos cohortes tienen una edad mínima de 12 años y una edad máxima de 40 años.

head(eder12_red[,c("folio","edad_retro","p1_anio","anio_naci")], 58)
##     folio edad_retro p1_anio anio_naci
## 35      2         12    1964      1952
## 36      2         13    1965      1952
## 37      2         14    1966      1952
## 38      2         15    1967      1952
## 39      2         16    1968      1952
## 40      2         17    1969      1952
## 41      2         18    1970      1952
## 42      2         19    1971      1952
## 43      2         20    1972      1952
## 44      2         21    1973      1952
## 45      2         22    1974      1952
## 46      2         23    1975      1952
## 47      2         24    1976      1952
## 48      2         25    1977      1952
## 49      2         26    1978      1952
## 50      2         27    1979      1952
## 51      2         28    1980      1952
## 52      2         29    1981      1952
## 53      2         30    1982      1952
## 54      2         31    1983      1952
## 55      2         32    1984      1952
## 56      2         33    1985      1952
## 57      2         34    1986      1952
## 58      2         35    1987      1952
## 59      2         36    1988      1952
## 60      2         37    1989      1952
## 61      2         38    1990      1952
## 62      2         39    1991      1952
## 63      2         40    1992      1952
## 89      3         12    1963      1951
## 90      3         13    1964      1951
## 91      3         14    1965      1951
## 92      3         15    1966      1951
## 93      3         16    1967      1951
## 94      3         17    1968      1951
## 95      3         18    1969      1951
## 96      3         19    1970      1951
## 97      3         20    1971      1951
## 98      3         21    1972      1951
## 99      3         22    1973      1951
## 100     3         23    1974      1951
## 101     3         24    1975      1951
## 102     3         25    1976      1951
## 103     3         26    1977      1951
## 104     3         27    1978      1951
## 105     3         28    1979      1951
## 106     3         29    1980      1951
## 107     3         30    1981      1951
## 108     3         31    1982      1951
## 109     3         32    1983      1951
## 110     3         33    1984      1951
## 111     3         34    1985      1951
## 112     3         35    1986      1951
## 113     3         36    1987      1951
## 114     3         37    1988      1951
## 115     3         38    1989      1951
## 116     3         39    1990      1951
## 117     3         40    1991      1951

Para el ejemplo de los dos primeros individuos nos hemos quedado con los años-persona entre los 12 y los 40 años.

Ahora vamos a generar dos sub-bases a partir de la base eder12, una para hombres y otra para mujeres.

eder12_H <- subset(eder12, sex == 1)
eder12_M <- subset(eder12, sex == 2)
table(eder12$sex)           
## 
##     1     2 
## 39597 41179
table(eder12_H$sex)           
## 
##     1 
## 39597
table(eder12_M$sex)
## 
##     2 
## 41179

Con pipes los comandos equivalentes serían:

eder12_h <- eder12 %>% 
  filter(sex == 1)
eder12_m <- eder12 %>% 
  filter(sex == 2)
table(eder12_h$sex)
## 
##     1 
## 39597
table(eder12_m$sex)
## 
##     2 
## 41179

También podemos crear sub-bases seleccionando sólo algunas variables.

dim(eder_ind)
## [1] 2782  172

Vamos a crear una sub-base de individuos para las cohortes 1 y 2 sólo con las variables folio,cohorte,sex y estrato. Hacemos las dos operaciones en un solo comando.

eder12_ind_cov <- eder_ind[eder_ind$cohorte < 3 ,c("folio","cohorte","sex","edad_retro","estrato")]  

Antes de la coma indicamos la condición para seleccionar las filas y después de la coma especificamos la lista de variables que queremos mantener.

dim(eder12_ind_cov)
## [1] 1739    5

Ahora tenemos 1,739 filas (que en esta base son individuos) y 5 variables.

names(eder12_ind_cov)
## [1] "folio"      "cohorte"    "sex"        "edad_retro" "estrato"
head(eder12_ind_cov)
##     folio cohorte sex edad_retro estrato
## 82      2       1   2         59       3
## 137     3       1   1         60       3
## 175     4       2   2         43       3
## 257     6       1   1         59       3
## 380    13       2   2         44       3
## 461    15       1   1         58       1

Para hacer esta misma operación con pipes sería así:

eder12_ind_cov2 <- eder_ind %>% 
  dplyr::filter(cohorte < 3) %>% 
  dplyr::select(folio, cohorte, sex, edad_retro, estrato)

dim(eder12_ind_cov2)
## [1] 1739    5

Indicamos dplyr:: para forzar a que use la función select (y filter) que está dentro del paquete dplyr y no otra función que tenga el mismo nombre dentro de otro paquete.

Algunas opciones interesantes al usar la función select: Podemos indicar que seleccione todas las variables cuyo nombre empieza igual.

names(eder)
##   [1] "folio"       "cd_a"        "ent"         "con"         "upm"        
##   [6] "v_sel"       "n_hog"       "h_mud"       "per"         "d_sem"      
##  [11] "n_pro_viv"   "n_ren"       "edad_retro"  "sex"         "p1_anio"    
##  [16] "p1_mes"      "p1_eda"      "p2_1"        "p2_1_c"      "p2_2"       
##  [21] "p2_3"        "p2_3_c"      "p2_4"        "conmig"      "acumig"     
##  [26] "conmign"     "acumign"     "conmigi"     "acumigi"     "sinmig"     
##  [31] "p3_1"        "p3_2"        "p3_3"        "p3_4_anio"   "p3_4_nivel" 
##  [36] "p4_1"        "p4_3"        "p4_4"        "p4_4_c"      "p4_5"       
##  [41] "p4_5_c"      "p4_6"        "p4_7"        "p4_8"        "p4_9"       
##  [46] "conlab"      "aculab"      "camlaba"     "aculaba"     "deslabc"    
##  [51] "deslaba"     "p5_1a_pa"    "p5_1b_pa"    "p5_1a_ma"    "p5_1b_ma"   
##  [56] "p5_2"        "p5_3"        "p6_1"        "p6_2_nom_1"  "p6_2_anio1" 
##  [61] "p6_3_nup_1"  "p6_6_1"      "p6_2_nom_2"  "p6_2_anio2"  "p6_3_nup_2" 
##  [66] "p6_6_2"      "p6_2_nom_3"  "p6_2_anio3"  "p6_3_nup_3"  "p6_6_3"     
##  [71] "p6_2_nom_4"  "p6_2_anio4"  "p6_3_nup_4"  "p6_6_4"      "sincony"    
##  [76] "p6_7_so"     "p6_7_sa"     "p6_8"        "p7_1"        "p7_2_nom_1" 
##  [81] "p7_2_sex_1"  "p7_3_1"      "p7_4_1"      "p7_5_1"      "p7_7_1"     
##  [86] "p7_2_nom_2"  "p7_2_sex_2"  "p7_3_2"      "p7_4_2"      "p7_5_2"     
##  [91] "p7_7_2"      "p7_2_nom_3"  "p7_2_sex_3"  "p7_3_3"      "p7_4_3"     
##  [96] "p7_5_3"      "p7_7_3"      "p7_2_nom_4"  "p7_2_sex_4"  "p7_3_4"     
## [101] "p7_4_4"      "p7_5_4"      "p7_7_4"      "p7_2_nom_5"  "p7_2_sex_5" 
## [106] "p7_3_5"      "p7_4_5"      "p7_5_5"      "p7_7_5"      "p7_2_nom_6" 
## [111] "p7_2_sex_6"  "p7_3_6"      "p7_4_6"      "p7_5_6"      "p7_7_6"     
## [116] "p7_2_nom_7"  "p7_2_sex_7"  "p7_3_7"      "p7_4_7"      "p7_5_7"     
## [121] "p7_7_7"      "p7_2_nom_8"  "p7_2_sex_8"  "p7_3_8"      "p7_4_8"     
## [126] "p7_5_8"      "p7_7_8"      "p7_2_nom_9"  "p7_2_sex_9"  "p7_3_9"     
## [131] "p7_4_9"      "p7_5_9"      "p7_7_9"      "p7_2_nom10"  "p7_2_sex10" 
## [136] "p7_3_10"     "p7_4_10"     "p7_5_10"     "p7_7_10"     "p7_2_nom11" 
## [141] "p7_2_sex11"  "p7_3_11"     "p7_4_11"     "p7_5_11"     "p7_7_11"    
## [146] "p7_2_nom12"  "p7_2_sex12"  "p7_3_12"     "p7_4_12"     "p7_5_12"    
## [151] "p7_7_12"     "p7_2_nom13"  "p7_2_sex13"  "p7_3_13"     "p7_4_13"    
## [156] "p7_5_13"     "p7_7_13"     "p7_2_nom14"  "p7_2_sex14"  "p7_3_14"    
## [161] "p7_4_14"     "p7_5_14"     "p7_7_14"     "acuhijo"     "p8_1"       
## [166] "fac"         "anio_naci"   "cohorte"     "tercilesios" "estrato"    
## [171] "ent_f"       "cohorte_f"

Seleccionemos un grupo de variables, incluidas todas las que empiezan con “p4”.

sub <- eder %>% 
  dplyr::select(folio, sex, cohorte, starts_with("p4"))
names(sub)
##  [1] "folio"   "sex"     "cohorte" "p4_1"    "p4_3"    "p4_4"    "p4_4_c" 
##  [8] "p4_5"    "p4_5_c"  "p4_6"    "p4_7"    "p4_8"    "p4_9"

También existen comandos equivalentes para seleccionar variables según los caracteres con los que terminan (ends_with) o los caracteres que contienen (contains).

También podemos seleccionar en un solo comando todas las variables que se encuentran entre dos. Por ejemplo, seleccionemos todas las variables que van de conmig a sinmig y de conlab a deslaba.

sub2 <- eder %>% 
  dplyr::select(folio, sex, cohorte, conmig:sinmig, conlab:deslaba)
names(sub2)
##  [1] "folio"   "sex"     "cohorte" "conmig"  "acumig"  "conmign" "acumign"
##  [8] "conmigi" "acumigi" "sinmig"  "conlab"  "aculab"  "camlaba" "aculaba"
## [15] "deslabc" "deslaba"

b. Ordenar y pegar bases

Para unir todos los casos de dos sub-bases en una única base usamos el comando rbind. Es el pegado por filas.

?rbind

Habíamos separado hombres y mujeres en dos sub-bases (eder12_H y eder12_M). Juntémolas de nuevo.

dim(eder12_M)
## [1] 41179   172
dim(eder12_H)
## [1] 39597   172
eder12_HM <- rbind(eder12_M, eder12_H)
dim(eder12_HM)
## [1] 80776   172
dim(eder12)
## [1] 80776   172

¡Cuidado! Para poder usar rbind las dos sub-bases tienen que tener las mismas variables. Si no, dará error. Por ejemplo, si eliminamos algunas variables de la sub-base eder12_H e intentamos pegarla con la sub-base eder12_M completa, dará error.

eder12_H_red <- eder12_H[,-c(20:22)]
eder_err <- rbind(eder12_M, eder12_H_red)
## Error in rbind(deparse.level, ...): numbers of columns of arguments do not match

La función cbind es el equivalente a rbind para pegar bases por columnas. Es decir, para pegar variables a una base. Ambas bases en el cbind deben tener los mismos casos (filas).

Sin embargo, para pegar sub-bases por columnas (añadir variable), generalmente usamos el comando merge. Es más seguro que cbind, ya que permite tener más controles de que estamos haciendo bien el pegado.

Para usar merge necesitamos que los casos de las dos bases estén ordenados de la misma manera. Para eso usamos el comando sort.

?sort
is.unsorted(eder12$folio)
## [1] FALSE

Este comando nos permite saber si la base está ordenada (en sentido creciente) de acuerdo a una variable concreta. Al indicar FALSE, sabemos que la base no está desordenada por la variable folio; es decir, está ordenada.

Veamos si está ordenada la base eder12_HM (resultado de pegar con rbind la base de hombres y la base de mujeres).

is.unsorted(eder12_HM$folio)
## [1] TRUE

Indica TRUE; es decir, la base eder12_HM no está ordenada según la variable folio.

Para ordenar por una variable, usamos el comando sort. El objetivo es tener ordenada la base por folio y después por edad_retro.

head(eder12_HM[,c("folio","edad_retro","p1_anio","anio_naci")],58)
##     folio edad_retro p1_anio anio_naci
## 29      2          6    1958      1952
## 30      2          7    1959      1952
## 31      2          8    1960      1952
## 32      2          9    1961      1952
## 33      2         10    1962      1952
## 34      2         11    1963      1952
## 35      2         12    1964      1952
## 36      2         13    1965      1952
## 37      2         14    1966      1952
## 38      2         15    1967      1952
## 39      2         16    1968      1952
## 40      2         17    1969      1952
## 41      2         18    1970      1952
## 42      2         19    1971      1952
## 43      2         20    1972      1952
## 44      2         21    1973      1952
## 45      2         22    1974      1952
## 46      2         23    1975      1952
## 47      2         24    1976      1952
## 48      2         25    1977      1952
## 49      2         26    1978      1952
## 50      2         27    1979      1952
## 51      2         28    1980      1952
## 52      2         29    1981      1952
## 53      2         30    1982      1952
## 54      2         31    1983      1952
## 55      2         32    1984      1952
## 56      2         33    1985      1952
## 57      2         34    1986      1952
## 58      2         35    1987      1952
## 59      2         36    1988      1952
## 60      2         37    1989      1952
## 61      2         38    1990      1952
## 62      2         39    1991      1952
## 63      2         40    1992      1952
## 64      2         41    1993      1952
## 65      2         42    1994      1952
## 66      2         43    1995      1952
## 67      2         44    1996      1952
## 68      2         45    1997      1952
## 69      2         46    1998      1952
## 70      2         47    1999      1952
## 71      2         48    2000      1952
## 72      2         49    2001      1952
## 73      2         50    2002      1952
## 74      2         51    2003      1952
## 75      2         52    2004      1952
## 76      2         53    2005      1952
## 77      2         54    2006      1952
## 78      2         55    2007      1952
## 79      2         56    2008      1952
## 80      2         57    2009      1952
## 81      2         58    2010      1952
## 82      2         59    2011      1952
## 138     4          6    1974      1968
## 139     4          7    1975      1968
## 140     4          8    1976      1968
## 141     4          9    1977      1968

Vamos a ordenar primero por la variable edad_retro. Si ordenamos la base por edad, mezcla los casos por folio.

eder12_HMs <- eder12_HM[order(eder12_HM$edad_retro), ]
head(eder12_HMs[,c("folio","edad_retro","p1_anio","anio_naci")],58)
##      folio edad_retro p1_anio anio_naci
## 29       2          6    1958      1952
## 138      4          6    1974      1968
## 342     13          6    1973      1967
## 462     16          6    1959      1953
## 581     19          6    1957      1951
## 661     21          6    1973      1967
## 740     23          6    1972      1966
## 862     26          6    1959      1953
## 995     29          6    1956      1950
## 1078    31          6    1956      1950
## 1428    40          6    1972      1966
## 1532    43          6    1956      1950
## 1588    44          6    1960      1954
## 1693    46          6    1972      1966
## 1815    50          6    1958      1952
## 1897    53          6    1972      1966
## 2044    56          6    1972      1966
## 2084    57          6    1957      1951
## 2258    61          6    1958      1952
## 2312    62          6    1958      1952
## 2421    65          6    1973      1967
## 2661    71          6    1973      1967
## 2700    72          6    1958      1952
## 2754    73          6    1971      1965
## 2939    78          6    1973      1967
## 3138    84          6    1957      1951
## 3258    88          6    1974      1968
## 3334    90          6    1972      1966
## 3374    92          6    1957      1951
## 3494    95          6    1975      1969
## 3561    97          6    1959      1953
## 3716   102          6    1973      1967
## 3938   110          6    1972      1966
## 4033   114          6    1973      1967
## 4153   117          6    1959      1953
## 4234   119          6    1959      1953
## 4325   122          6    1974      1968
## 4416   124          6    1972      1966
## 4562   128          6    1972      1966
## 4711   132          6    1960      1954
## 4922   139          6    1957      1951
## 5124   144          6    1973      1967
## 5217   146          6    1959      1953
## 5360   150          6    1973      1967
## 5428   152          6    1957      1951
## 5521   155          6    1973      1967
## 5615   161          6    1972      1966
## 5840   171          6    1972      1966
## 5880   172          6    1957      1951
## 6040   176          6    1960      1954
## 6118   178          6    1973      1967
## 6369   185          6    1973      1967
## 6435   187          6    1958      1952
## 6489   189          6    1974      1968
## 6744   195          6    1973      1967
## 6783   196          6    1958      1952
## 6956   201          6    1973      1967
## 7050   203          6    1972      1966

También podemos ordenar la base por una variable en sentido decreciente:

eder12_HMs <- eder12_HM[order(eder12_HM$edad_retro, decreasing=T), ]
head(eder12_HMs[,c("folio","edad_retro","p1_anio","anio_naci")],58)
##        folio edad_retro p1_anio anio_naci
## 20159    564         62    2011      1949
## 60787   1783         62    2011      1949
## 68485   2007         62    2011      1949
## 71722   2105         62    2011      1949
## 86685   2547         62    2011      1949
## 57719   1691         62    2011      1949
## 105404  3095         62    2011      1949
## 1050      29         61    2011      1950
## 1133      31         61    2011      1950
## 1587      43         61    2011      1950
## 12271    350         61    2011      1950
## 14275    403         61    2011      1950
## 20158    564         61    2010      1949
## 60786   1783         61    2010      1949
## 63033   1843         61    2011      1950
## 68484   2007         61    2010      1949
## 69608   2043         61    2011      1950
## 69890   2053         61    2011      1950
## 71721   2105         61    2010      1949
## 83154   2441         61    2011      1950
## 84803   2489         61    2011      1950
## 86684   2547         61    2010      1949
## 93880   2758         61    2011      1950
## 6636     191         61    2011      1950
## 11592    331         61    2011      1950
## 57718   1691         61    2010      1949
## 59052   1730         61    2011      1950
## 66187   1937         61    2011      1950
## 84747   2488         61    2011      1950
## 105403  3095         61    2010      1949
## 635       19         60    2011      1951
## 1049      29         60    2010      1950
## 1132      31         60    2010      1950
## 1586      43         60    2010      1950
## 2138      57         60    2011      1951
## 3192      84         60    2011      1951
## 3428      92         60    2011      1951
## 4976     139         60    2011      1951
## 5482     152         60    2011      1951
## 5934     172         60    2011      1951
## 7438     214         60    2011      1951
## 8868     252         60    2011      1951
## 10793    309         60    2011      1951
## 11865    337         60    2011      1951
## 12270    350         60    2010      1950
## 12811    366         60    2011      1951
## 13145    374         60    2011      1951
## 14274    403         60    2010      1950
## 14789    416         60    2011      1951
## 15272    430         60    2011      1951
## 15858    444         60    2011      1951
## 16205    453         60    2011      1951
## 16299    456         60    2011      1951
## 16765    470         60    2011      1951
## 18988    531         60    2011      1951
## 19271    540         60    2011      1951
## 19731    553         60    2011      1951
## 20157    564         60    2009      1949

Para ordenar la base primero por folio y luego por edad, indicamos ambas variables en el sort.

eder12_HMs <- eder12_HM[order(eder12_HM$folio, eder12_HM$edad_retro), ]
head(eder12_HMs[,c("folio","edad_retro","p1_anio","anio_naci")],58)
##    folio edad_retro p1_anio anio_naci
## 29     2          6    1958      1952
## 30     2          7    1959      1952
## 31     2          8    1960      1952
## 32     2          9    1961      1952
## 33     2         10    1962      1952
## 34     2         11    1963      1952
## 35     2         12    1964      1952
## 36     2         13    1965      1952
## 37     2         14    1966      1952
## 38     2         15    1967      1952
## 39     2         16    1968      1952
## 40     2         17    1969      1952
## 41     2         18    1970      1952
## 42     2         19    1971      1952
## 43     2         20    1972      1952
## 44     2         21    1973      1952
## 45     2         22    1974      1952
## 46     2         23    1975      1952
## 47     2         24    1976      1952
## 48     2         25    1977      1952
## 49     2         26    1978      1952
## 50     2         27    1979      1952
## 51     2         28    1980      1952
## 52     2         29    1981      1952
## 53     2         30    1982      1952
## 54     2         31    1983      1952
## 55     2         32    1984      1952
## 56     2         33    1985      1952
## 57     2         34    1986      1952
## 58     2         35    1987      1952
## 59     2         36    1988      1952
## 60     2         37    1989      1952
## 61     2         38    1990      1952
## 62     2         39    1991      1952
## 63     2         40    1992      1952
## 64     2         41    1993      1952
## 65     2         42    1994      1952
## 66     2         43    1995      1952
## 67     2         44    1996      1952
## 68     2         45    1997      1952
## 69     2         46    1998      1952
## 70     2         47    1999      1952
## 71     2         48    2000      1952
## 72     2         49    2001      1952
## 73     2         50    2002      1952
## 74     2         51    2003      1952
## 75     2         52    2004      1952
## 76     2         53    2005      1952
## 77     2         54    2006      1952
## 78     2         55    2007      1952
## 79     2         56    2008      1952
## 80     2         57    2009      1952
## 81     2         58    2010      1952
## 82     2         59    2011      1952
## 83     3          6    1957      1951
## 84     3          7    1958      1951
## 85     3          8    1959      1951
## 86     3          9    1960      1951
is.unsorted(eder12_HMs$folio)
## [1] FALSE

Ahora la base sí está ordenada por la variable folio.

Para ordenar las variables dentro de una base (en lugar de los casos), usaríamos el comando order.

?order

Veamos ahora cómo funciona el comando merge para pegar variables de dos bases con casos comunes. Hay que especificar una llave que permita identificar los mismos casos en ambas bases.

El formato general de cómo se especifica la función merge es: nuevabase <- merge(base1, base2, by = “var_llave”)

En la opción by se indica la variable que funciona como llave, que es común en ambas bases. Puede ser un conjunto de variables.

?merge

Hay varias opciones para el merge. a) Inner join: sólo mantiene los casos que existen en ambas bases de datos. Es lo que hace si no indicamos nada adicional.

  1. Outer join: mantiene todos los casos de ambas bases, con NA en las variables nuevas para los casos que sólo existan en una de la bases. Para ello hay que indicar: nuevabase <- merge(base1, base2, by = “var_llave”, all=TRUE)

  2. Left join: mantiene todos los casos de la base1, con NA en las variables de la base2 para los casos que no existan en la base2. Para ello hay que indicar: nuevabase <- merge(base1, base2, by = “var_llave”, all.x=TRUE)

  3. Right join: mantiene todos los casos de la base2, con NA en las variables de la base1 para los casos que no existan en la base1. Para ello hay que indicar: nuevabase <- merge(base1, base2, by = “var_llave”, all.y=TRUE)

Ejemplos de merge:

  1. Vamos a pegar la base eder12_ind_cov y una sub-base (sub3) en la que faltan esas variables.
eder12_ind_cov <- eder12_ind_cov %>%
  dplyr::select(-edad_retro, -sex)
dim(eder12_ind_cov)
## [1] 1739    3
names(eder12_ind_cov)
## [1] "folio"   "cohorte" "estrato"

Seleccionamos un subconjunto de variables en la base eder12_red

sub3 <- eder12_red %>% 
  dplyr::select(folio, sex, edad_retro, conmig:sinmig, conlab:deslaba)
dim(sub3)
## [1] 50431    16
names(sub3)
##  [1] "folio"      "sex"        "edad_retro" "conmig"     "acumig"    
##  [6] "conmign"    "acumign"    "conmigi"    "acumigi"    "sinmig"    
## [11] "conlab"     "aculab"     "camlaba"    "aculaba"    "deslabc"   
## [16] "deslaba"

La base principal (base1) será sub3 y a esa base le añadiremos la base secundaria (base2), que será eder12_ind_cov.

base_m1 <- merge(sub3, eder12_ind_cov, by="folio")
dim(base_m1)
## [1] 50431    18
names(base_m1)
##  [1] "folio"      "sex"        "edad_retro" "conmig"     "acumig"    
##  [6] "conmign"    "acumign"    "conmigi"    "acumigi"    "sinmig"    
## [11] "conlab"     "aculab"     "camlaba"    "aculaba"    "deslabc"   
## [16] "deslaba"    "cohorte"    "estrato"

La base resultante tiene el mismo número de casos que sub3, porque todos los casos identificados mediante “folio” están también en la base eder12_ind_cov. En este caso el resultado sería el mismo usando all.x=T o all=T.

table(eder12_ind_cov$estrato)
## 
##   1   2   3 
## 608 551 580
table(base_m1$estrato)
## 
##     1     2     3 
## 17632 15979 16820
table(eder12_ind_cov$cohorte)
## 
##   1   2 
## 863 876
table(base_m1$cohorte)
## 
##     1     2 
## 25027 25404

Los valores de las nuevas variables (estrato y cohorte), provenientes de la base eder12_ind_cov, han quedado asignados en base_m1 a cada fila con el mismo número de folio. En la base sub3 hay varias filas para cada número de folio; por ello la frecuencia de cada valor de estrato y cohorte aumenta en la base pegada.

  1. Vamos a pegar una sub-base de eder12 (que contiene datos para cada año-persona de los individuos de las cohortes 1 y 2) y una sub-base de eder, con otras variables y datos para cada año-persona de los individuos de las cohortes 1, 2 y 3.
sub_eder12 <- eder12 %>% 
  dplyr::select(folio, sex, edad_retro, conmig:sinmig, conlab:deslaba)
dim(sub_eder12)
## [1] 80776    16
names(sub_eder12)
##  [1] "folio"      "sex"        "edad_retro" "conmig"     "acumig"    
##  [6] "conmign"    "acumign"    "conmigi"    "acumigi"    "sinmig"    
## [11] "conlab"     "aculab"     "camlaba"    "aculaba"    "deslabc"   
## [16] "deslaba"
sub_eder <- eder %>% 
  dplyr::select(folio, sex, edad_retro, anio_naci:estrato)
dim(sub_eder)
## [1] 109034      7
names(sub_eder)
## [1] "folio"       "sex"         "edad_retro"  "anio_naci"   "cohorte"    
## [6] "tercilesios" "estrato"

En este caso tenemos tres variables coincidentes: “folio” y “edad_retro” sirven para identificar cada año-persona. Además, “sex” es común en ambas variables. Tenemos que indicar las tres variables como variables comunes en el merge.

Primera opción: inner-join (mantiene los casos de la base sub_eder12)

base_m2i <- merge(sub_eder12,sub_eder,by=c("folio","edad_retro","sex"))
dim(base_m2i)
## [1] 80776    20
names(base_m2i)
##  [1] "folio"       "edad_retro"  "sex"         "conmig"      "acumig"     
##  [6] "conmign"     "acumign"     "conmigi"     "acumigi"     "sinmig"     
## [11] "conlab"      "aculab"      "camlaba"     "aculaba"     "deslabc"    
## [16] "deslaba"     "anio_naci"   "cohorte"     "tercilesios" "estrato"
table(base_m2i$cohorte)
## 
##     1     2 
## 46535 34241

La base resultante tiene el mismo número de casos que sub_eder12: 80,776 (únicamente los de las cohortes 1 y 2). El resultado habría sido el mismo si hubiésemos indicado all.x=T (left join).

Segunda opción: outer-join (mantiene todos los casos, también los que están sólo en la base sub_eder).

base_m2o <- merge(sub_eder12,sub_eder,by=c("folio","edad_retro","sex"), all=TRUE)
dim(base_m2o)
## [1] 109034     20
names(base_m2o)
##  [1] "folio"       "edad_retro"  "sex"         "conmig"      "acumig"     
##  [6] "conmign"     "acumign"     "conmigi"     "acumigi"     "sinmig"     
## [11] "conlab"      "aculab"      "camlaba"     "aculaba"     "deslabc"    
## [16] "deslaba"     "anio_naci"   "cohorte"     "tercilesios" "estrato"
table(base_m2o$cohorte)
## 
##     1     2     3 
## 46535 34241 28258

Ahora la base resultante tiene el mismo número de casos que sub_eder: 109,034 (los de las cohortes 1, 2 y 3). El resultado habría sido el mismo si hubiésemos indicado all.y=T (right join). Esto es así en este caso, porque sub_eder12 está contenida en sub_eder. Cuando en ambas bases hay casos que no están en la otra, los distintos tipos de join arrojan resultados diferentes.


c. Crear y recodificar variables

Tenemos varias formas de crear nuevas variables a partir de otras.

  1. Paso a paso: Podemos crear una nueva variable asignando los valores uno a uno en líneas de código separadas. Ejemplo: vamos a recodificar la variable “p3_4_nivel” (máximo nivel de estudios aprobado en menos categorías).
table(eder$p3_4_nivel)
## 
##     0     1     2     3     4     5     6     7     8     9 
##  3664 31089 22019  1327 10986  2750 12794  2142 18731  3532

Vamos a crear 4 categorías: 1 “hasta primaria”, 2 “secundaria”, 3 “media superior” y 4 “universidad”. Primero creamos una variable nueva “niv_ed”, inicialmente vacía, y a partir de ahí empezamos a asignarle los valores.

eder$niv_ed <- NA
eder$niv_ed[eder$p3_4_nivel==0 | eder$p3_4_nivel==1] <- 1
eder$niv_ed[eder$p3_4_nivel==2 | eder$p3_4_nivel==3] <- 2
eder$niv_ed[eder$p3_4_nivel>=4 & eder$p3_4_nivel<=7] <- 3
eder$niv_ed[eder$p3_4_nivel==8 | eder$p3_4_nivel==9] <- 4

table(eder$p3_4_nivel,eder$niv_ed, useNA="ifany")
##    
##         1     2     3     4
##   0  3664     0     0     0
##   1 31089     0     0     0
##   2     0 22019     0     0
##   3     0  1327     0     0
##   4     0     0 10986     0
##   5     0     0  2750     0
##   6     0     0 12794     0
##   7     0     0  2142     0
##   8     0     0     0 18731
##   9     0     0     0  3532
  1. Función “recode”: Podemos usar la función recode para indicar en una sola línea los valores asignados a cada valor de la nueva variable. Ejemplo: vamos a recodificar la variable “p4_6” (posición laboral en el trabajo).
table(eder$p4_6)
## 
##     0     1     2     3     4     5     6 
## 49798  2536  9636 41823  2451  2738    52

Vamos a crear una variable nueva “cl”, inicialmente vacía, y le indicamos los valores de p4_6 que quedarán asignado a cada valor de la nueva variable. La variable “cl” tendrá tres categorías: 0 “no trabaja”, 1 “trabaja asalariado/a” y 2 “trabaja de otro modo”

eder$cl <- NA
eder$cl <- recode(eder$p4_6,"c(1,2,4,5,6)='2'; 0='0'; 3='1'")

table(eder$p4_6, eder$cl, useNA="ifany")
##    
##         0     1     2
##   0 49798     0     0
##   1     0     0  2536
##   2     0     0  9636
##   3     0 41823     0
##   4     0     0  2451
##   5     0     0  2738
##   6     0     0    52

Lo mismo habríamos obtenido usando “else”, en lugar de la cadena de valores:

eder$cl2 <- NA
eder$cl2 <- recode(eder$p4_6,"0='0'; 3='1'; else='2'")

table(eder$p4_6, eder$cl2, useNA="ifany")
##    
##         0     1     2
##   0 49798     0     0
##   1     0     0  2536
##   2     0     0  9636
##   3     0 41823     0
##   4     0     0  2451
##   5     0     0  2738
##   6     0     0    52
  1. Función “ifelse”: Podemos usar la función ifelse, indicando las condiciones que se deben cumplir para que un valor de la variable a recodificar quede asignado a cada valor de la nueva variable. Ejemplo: vamos a recodificar la variable p3_2 (estudios realizados ese año).
table(eder$p3_2)
## 
##     0     1     2     3     4     5     6     7     8     9    10    90    91 
##  4981 15477  5012   573  2317   512   933   320  2626   251    82   980 28127 
##    92    93    94    95    96    97    98    99 
## 15066  1401  6912  2003  8997  1471  9875  1118

Vamos a crear una nueva variable “est” con valores 1 si la persona estudia (cualquier nivel) y 0 si no estudia en ese año.

eder$est <- NA
eder$est <- ifelse(eder$p3_2>=1 & eder$p3_2<=10,1,0)
table(eder$p3_2,eder$est, useNA="ifany")
##     
##          0     1
##   0   4981     0
##   1      0 15477
##   2      0  5012
##   3      0   573
##   4      0  2317
##   5      0   512
##   6      0   933
##   7      0   320
##   8      0  2626
##   9      0   251
##   10     0    82
##   90   980     0
##   91 28127     0
##   92 15066     0
##   93  1401     0
##   94  6912     0
##   95  2003     0
##   96  8997     0
##   97  1471     0
##   98  9875     0
##   99  1118     0

La función ifelse tiene tres partes: ifelse(condición,a,b). a es el valor que reciben los casos que cumplen la condición; b es el valor que reciben los casos restantes. Se pueden encadenar varios ifelse para asignar múltiples valores. Por ejemplo, si quisiéramos que la variable distinguiera si la persona no estudia (0), estudia nivel básico (primaria o secundaria) (1) o nivel medio superior (2), lo haríamos así:

eder$est2 <- NA
eder$est2 <- ifelse(eder$p3_2>=1 & eder$p3_2<=3,1,
                    ifelse(eder$p3_2>=4 & eder$p3_2<=10,2,0))
table(eder$p3_2,eder$est2, useNA="ifany")
##     
##          0     1     2
##   0   4981     0     0
##   1      0 15477     0
##   2      0  5012     0
##   3      0   573     0
##   4      0     0  2317
##   5      0     0   512
##   6      0     0   933
##   7      0     0   320
##   8      0     0  2626
##   9      0     0   251
##   10     0     0    82
##   90   980     0     0
##   91 28127     0     0
##   92 15066     0     0
##   93  1401     0     0
##   94  6912     0     0
##   95  2003     0     0
##   96  8997     0     0
##   97  1471     0     0
##   98  9875     0     0
##   99  1118     0     0
  1. Pipes y función “mutate” Podemos usar pipes para recodificar y dentro de ellos usaremos la función mutate que pertenece al paquete dplyr. Ejemplo: vamos a recodificar la variable “acuhijo” (número acumulado de hijos).
table(eder$acuhijo)
## 
##     0     1     2     3     4     5     6     7     8     9    10    11    12 
## 55999 11015 14337 13642  7346  3057  1643   980   305   421   131   130     2 
##    13    14 
##     3    23

Vamos a crear una variable n_hijos con tres categorías: 0 “sin hijos”, 1 “1-2 hijos”, 2 “3 o más hijos”.

eder <- eder %>%
  mutate(n_hijos = case_when(
    acuhijo == 0 ~ 0,
    acuhijo ==1 | acuhijo==2 ~ 1,
    TRUE ~ 2
  ))
table(eder$acuhijo, eder$n_hijos, useNA="ifany")
##     
##          0     1     2
##   0  55999     0     0
##   1      0 11015     0
##   2      0 14337     0
##   3      0     0 13642
##   4      0     0  7346
##   5      0     0  3057
##   6      0     0  1643
##   7      0     0   980
##   8      0     0   305
##   9      0     0   421
##   10     0     0   131
##   11     0     0   130
##   12     0     0     2
##   13     0     0     3
##   14     0     0    23

En el caso de mutate no hace falta crear la variable previamente. Se indica el nombre al inicio del mutate y la crea en el proceso. “TRUE” en mutate equivale al “else” de la función ifelse.

Salvo en la función recode, en todas las demás formas de recodificación podemos combinar condiciones de varias variables para la asignación de valores en la nueva variable.