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
yarrow
(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énrename
,relocate
,pull
).mutate()
: crear variables (ver tambiéntransmute()
).filter()
: seleccionar casos/filas (ver tambiénslice()
).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.