2.4 El operador pipeline
(%>%)
El software estadístico R
es un lenguaje de programación creado por estadísticos y para estadísticos. Una de las contribuciones recientes a este software es el desarrollo de los pipelines
(tuberías) que permiten de una forma intuitiva generar consultas y objetos desde una base de datos. El operador pipeline
, %>%
, es nativo del paquete Bache y Wickham (2022) y está cargado automáticamente en los paquetes del tidyverse
.
El objetivo del operador es ayudar a escribir el código de una manera que sea más fácil de leer y entender. En este sentido, el operador %>%
permite encadenar operaciones para que el resultado de una operación anterior se convierta en el argumento de la siguiente operación. A continuación, se presenta un ejemplo sencillo del uso del operador %>%
con la base de datos BigLucy haciendo el conteo del total de elementos que contiene la base de datos utilizando la función count
.
## n
## 1 150266
La anterior línea de código se entiende así: con la base de datos realice un conteo. Por otro lado, existe una gama amplia de funciones que se pueden utilizar con el operador %>%
. A continuación, se enlistan una serie de funciones muy útiles al momento de hacer análisis con bases de datos provenientes de encuestas de hogares:
- filter: mantiene un criterio de filtro sobre alguna variable o mezcla de variables.
- select: selecciona columnas por nombres.
- arrange: ordena las filas de la base de datos.
- mutate: añade nuevas variables a la base de datos.
- summarise: reduce variables a valores agrupados y los presenta en una tabla.
- group_by: ejecuta funciones y agrupa el resultado por las variables de interés.
Una de las primeras consultas que se pueden realizar en las encuestas de hogares es saber el número de entrevistas efectivamente realizadas. Usando %>%
se realiza de la siguiente manera:
## [1] 150266
Otro de los ejercicios que se hacen usualmente con las encuestas de hogares está relacionado con hacer descriptivos de la base por sexo. Una de las formas más sencillas de hacer esta revisión es usar la función filter
, para generar dos bases de datos.
Por otro lado, si el interés ahora es filtrar la base de datos por aquellas personas que no son pobres, se realiza de la siguiente manera:
En este mismo sentido, es posible también crear nuevas bases de datos filtradas por algunos ingresos particulares mensuales, es posible realizarlo de la siguiente manera:
dataingreso1 <- data1 %>%
filter(Income %in% c(265, 600))
dataingreso2 <- data1 %>%
filter(Income %in% c(1000, 2000))
Dado que la base del ejemplo no cuenta con regiones geográficas definidas, se pueden construir agrupando algunos estratos, para ello se usa el siguiente código:
Region <- as.numeric(gsub(
pattern = "\\D",
replacement = "",
x = data1$Stratum
))
data1$Region <-
cut(
Region,
breaks = 5,
labels = c("Norte", "Sur", "Centro", "Occidente", "Oriente")
)
La mayoría de veces, para los análisis con las bases de hogares, es necesario recodificar los niveles de los factores. El siguiente código permite generar los nombres de las regiones, junto con sus respectivos rótulos.
data1$IDRegion <- factor(
data1$Region,
levels = c("Norte", "Sur", "Centro", "Occidente", "Oriente"),
labels = c("01", "02", "03", "04", "05")
)
Por último, para efectos de visualización en tablas y gráficos es conviene codificar los nombres de las variables como sigue:
data1$Nom_corto <- factor(
data1$Region,
levels = c("Norte", "Sur", "Centro", "Occidente", "Oriente"),
labels = c("N", "S", "C", "O", "E")
)
Otra función muy útil en los procesamientos descriptivos de las encuestas de hogares es la función select
, la cual permite seleccionar un grupo de variables de interés que se quieren analizar. Si, por ejemplo, se desea seleccionar de la base de ejemplo solo las variables que identifican al hogar (HHID
), a las unidades primarias de muestreo (PSU
), la Zona (Zone
), el sexo de la persona (Sex
) y sus ingresos (Income
), se realiza de la siguiente manera:
La función select
no solo sirve para seleccionar variables de una base de datos, también se puede utilizar para eliminar algunas variables de la base de datos que ya no son de interés para el análisis o que, simplemente, se generaron en la manipulación de la base de datos como variables temporales para realizar algunos cálculos de interés. Por ejemplo, si se desea eliminar de la base de datos de ejemplo las variables de identificación del hogar y de identificación de las personas, se podría realizar introduciendo un signo “menos” (-) delante del nombre de la variable como sigue:
Por otro lado, si el objetivo fuese ordenar las filas de la base por alguna variable en particular, se utilizaría la función arrange
para realizar esta operación. A continuación, se ejemplifica con la base de datos dataingreso1
, cómo se ordena la base de acuerdo con la variable Income
:
## HHID PersonID Stratum PSU Zone Sex Age MaritalST Income
## 1 idHH02245 idPer01 idStrt017 PSU0166 Rural Male 73 Widowed 265
## 2 idHH02245 idPer02 idStrt017 PSU0166 Rural Male 38 Married 265
## 3 idHH02245 idPer03 idStrt017 PSU0166 Rural Female 37 Married 265
## 4 idHH02245 idPer04 idStrt017 PSU0166 Rural Male 16 Single 265
## 5 idHH02245 idPer05 idStrt017 PSU0166 Rural Male 12 Single 265
## 6 idHH02245 idPer06 idStrt017 PSU0166 Rural Male 11 <NA> 265
## Expenditure Employment Poverty
## 1 281.42 Inactive Relative
## 2 281.42 Employed Relative
## 3 281.42 Inactive Relative
## 4 281.42 Employed Relative
## 5 281.42 <NA> Relative
## 6 281.42 <NA> Relative
Es posible utilizar la función arrange
para hacer ordenamientos más complicados. Por ejemplo, ordenar por más de una variable. A modo de ejemplo, ordenemos la base de datos dataingreso1
de acuerdo con las variables Sexo
y Edad
.
## HHID PersonID Stratum PSU Zone Sex Age MaritalST Income
## 1 idHH02586 idPer05 idStrt018 PSU0193 Urban Female 2 <NA> 600
## 2 idHH23231 idPer05 idStrt018 PSU0193 Urban Female 2 <NA> 600
## 3 idHH19448 idPer05 idStrt115 PSU1571 Urban Female 2 <NA> 600
## 4 idHH40093 idPer05 idStrt115 PSU1571 Urban Female 2 <NA> 600
## 5 idHH14415 idPer05 idStrt091 PSU1182 Urban Female 3 <NA> 600
## 6 idHH35060 idPer05 idStrt091 PSU1182 Urban Female 3 <NA> 600
## Expenditure Employment Poverty
## 1 379.15 <NA> NotPoor
## 2 379.15 <NA> NotPoor
## 3 411.02 <NA> NotPoor
## 4 411.02 <NA> NotPoor
## 5 399.55 <NA> NotPoor
## 6 399.55 <NA> NotPoor
También es posible utilizar la función arrange
junto con la opción desc()
para que el ordenamiento sea descendente.
## HHID PersonID Stratum PSU Zone Sex Age MaritalST Income
## 1 idHH06945 idPer01 idStrt047 PSU0541 Urban Female 88 Separated 600
## 2 idHH27590 idPer01 idStrt047 PSU0541 Urban Female 88 Separated 600
## 3 idHH05798 idPer01 idStrt039 PSU0438 Urban Female 87 Widowed 600
## 4 idHH26443 idPer01 idStrt039 PSU0438 Urban Female 87 Widowed 600
## 5 idHH13013 idPer01 idStrt085 PSU1074 Urban Female 87 Widowed 600
## 6 idHH33658 idPer01 idStrt085 PSU1074 Urban Female 87 Widowed 600
## Expenditure Employment Poverty
## 1 543.59 Inactive NotPoor
## 2 543.59 Inactive NotPoor
## 3 1026.00 Inactive NotPoor
## 4 1026.00 Inactive NotPoor
## 5 266.00 Inactive NotPoor
## 6 266.00 Inactive NotPoor