5.1 El paquete dplyr

library(dplyr)

La principal ventaja de dplyr es que permite trabajar (de la misma forma) con datos en distintos formatos:

  • data.frame, tibble.

  • data.table: extensión (paquete backend) dtplyr.

  • conjuntos de datos más grandes que la memoria disponible: extensiones duckdb y arrow (incluyendo almacenamiento en la nube, e.g. AWS).

  • bases de datos relacionales (lenguaje SQL, locales o remotas); extensión dbplyr.

  • grandes volúmenes de datos (incluso almacenados en múltiples servidores; ecosistema Hadoop/Spark): extensión sparklyr (ver menú de RStudio Help > Cheat Sheets > Interfacing Spark with sparklyr).

El paquete dplyr permite sustituir operaciones con funciones base de R (como subset, split, apply, sapply, lapply, tapply, aggregate…) por una “gramática” más sencilla para la manipulación de datos. En lugar de operar sobre vectores como la mayoría de las funciones base, opera sobre conjuntos de datos (de forma que es compatible con el operador %>%). Los principales “verbos” (funciones) son:

  • select(): seleccionar variables (ver también rename, relocate, pull).

  • mutate(): crear variables (ver también transmute()).

  • filter(): seleccionar casos/filas (ver también slice()).

  • arrange(): ordenar casos/filas.

  • summarise(): resumir valores.

  • group_by(): permite operaciones por grupo empleando el concepto “dividir-aplicar-combinar” (ungroup() elimina el agrupamiento).

NOTA: Para entender el funcionamiento de ciertas funciones (como rowwise()) y las posibilidades en el manejo de datos, hay que tener en cuenta que un data.frame no es más que una lista cuyas componentes (variables) tienen la misma longitud. Realmente las componentes también pueden ser listas de la misma longitud y, por tanto, podemos almacenar casi cualquier estructura de datos en un data.frame.

En la primera parte de este capítulo consideraremos solo data.frame por comodidad. Emplearemos como ejemplo los datos de empleados de banca almacenados en el fichero empleados.RData (y supondremos que estamos interesados en estudiar si hay discriminación por cuestión de sexo o raza).

load("datos/empleados.RData")
attr(empleados, "variable.labels") <- NULL                  

En la Sección 5.6 final emplearemos una base de datos relacional como ejemplo.