Dplyr¶
Introducción¶
La librería dplyr en R es una herramienta poderosa para realizar operaciones de manipulación y transformación de datos de manera eficiente. Fue desarrollada por Hadley Wickham y se basa en una gramática coherente y fácil de usar para trabajar con datos en R. Dplyr se enfoca en proporcionar un conjunto de funciones optimizadas para realizar operaciones comunes de limpieza, filtrado, transformación y resumen de datos.
Las principales características y beneficios de dplyr son:
Sintaxis intuitiva: Dplyr utiliza una sintaxis clara y legible que facilita la comprensión y escritura de código. Esto permite a los usuarios expresar fácilmente las operaciones que desean realizar sobre los datos.
Rendimiento eficiente: Dplyr ha sido diseñado para ofrecer un rendimiento óptimo, especialmente al trabajar con grandes conjuntos de datos. Utiliza técnicas de optimización y aprovecha las funciones de bajo nivel en R para mejorar la velocidad de procesamiento.
Operaciones verbales: Las funciones de dplyr están diseñadas con nombres verbales intuitivos que reflejan las acciones que realizan. Esto hace que el código sea más legible y facilita la comprensión de las operaciones realizadas.
Manipulación de datos: Dplyr proporciona funciones para seleccionar columnas específicas (select), filtrar filas basadas en condiciones lógicas (filter), agregar nuevas columnas o transformar columnas existentes (mutate) y ordenar los datos según una o varias columnas (arrange).
Operaciones de agregación: Dplyr permite realizar operaciones de agregación por grupos utilizando las funciones group_by() y summarize(). Esto permite calcular estadísticas resumidas, como la media, suma, conteo, etc., para diferentes grupos de datos.
Combinación de datos: Dplyr ofrece funciones para combinar diferentes conjuntos de datos basándose en columnas comunes utilizando las funciones join(). Esto permite realizar uniones internas, externas, izquierdas y derechas entre los conjuntos de datos.
Ejemplo¶
Mostraremos unejemplo completo de cómo utilizar dplyr con el conjunto de datos "mtcars" incorporado en R:
# Cargar el paquete dplyr
library(dplyr)
library(readr)
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
# Ver una vista previa del conjunto de datos mtcars
id <- "17i49Lo740cALZuudrdQIP26-9zXfqREg"
url <- sprintf("https://docs.google.com/uc?id=%s&export=download", id)
mtcars <- read_csv(url)
Rows: 32 Columns: 12 ── Column specification ──────────────────────────────────────────────────────── Delimiter: "," chr (1): model dbl (11): mpg, cyl, disp, hp, drat, wt, qsec, vs, am, gear, carb ℹ Use `spec()` to retrieve the full column specification for this data. ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Mostrar primeras filas del dataframe
head(mtcars)
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> |
| Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
| Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
| Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
| Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
| Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
| Valiant | 18.1 | 6 | 225 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
Seleccionar columnas específicas:
# Seleccionar las columnas "mpg", "cyl" y "gear"
mtcars_select <- select(mtcars, mpg, cyl, gear)
head(mtcars_select)
| mpg | cyl | gear |
|---|---|---|
| <dbl> | <dbl> | <dbl> |
| 21.0 | 6 | 4 |
| 21.0 | 6 | 4 |
| 22.8 | 4 | 4 |
| 21.4 | 6 | 3 |
| 18.7 | 8 | 3 |
| 18.1 | 6 | 3 |
Filtrar filas basadas en una condición:
# Filtrar las filas donde el número de cilindros (cyl) es igual a 6
mtcars_filter <- filter(mtcars, cyl == 6)
head(mtcars_filter)
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> |
| Mazda RX4 | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
| Mazda RX4 Wag | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
| Hornet 4 Drive | 21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
| Valiant | 18.1 | 6 | 225.0 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 |
| Merc 280 | 19.2 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.30 | 1 | 0 | 4 | 4 |
| Merc 280C | 17.8 | 6 | 167.6 | 123 | 3.92 | 3.440 | 18.90 | 1 | 0 | 4 | 4 |
Agregar una nueva columna calculada:
# Agregar una nueva columna "km_l" que calcule el consumo de combustible en km por litro
mtcars_mutate <- mutate(mtcars, km_l = 1.60934 * mpg / 3.78541)
head(mtcars_mutate)
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | km_l |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> |
| Mazda RX4 | 21.0 | 6 | 160 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 | 8.928000 |
| Mazda RX4 Wag | 21.0 | 6 | 160 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 | 8.928000 |
| Datsun 710 | 22.8 | 4 | 108 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 | 9.693257 |
| Hornet 4 Drive | 21.4 | 6 | 258 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 | 9.098057 |
| Hornet Sportabout | 18.7 | 8 | 360 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 | 7.950171 |
| Valiant | 18.1 | 6 | 225 | 105 | 2.76 | 3.460 | 20.22 | 1 | 0 | 3 | 1 | 7.695086 |
Ordenar el conjunto de datos por una columna específica:
# Ordenar las filas por el número de cilindros (cyl) en orden descendente
mtcars_arrange <- arrange(mtcars, desc(cyl))
head(mtcars_arrange)
| model | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb |
|---|---|---|---|---|---|---|---|---|---|---|---|
| <chr> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> | <dbl> |
| Hornet Sportabout | 18.7 | 8 | 360.0 | 175 | 3.15 | 3.44 | 17.02 | 0 | 0 | 3 | 2 |
| Duster 360 | 14.3 | 8 | 360.0 | 245 | 3.21 | 3.57 | 15.84 | 0 | 0 | 3 | 4 |
| Merc 450SE | 16.4 | 8 | 275.8 | 180 | 3.07 | 4.07 | 17.40 | 0 | 0 | 3 | 3 |
| Merc 450SL | 17.3 | 8 | 275.8 | 180 | 3.07 | 3.73 | 17.60 | 0 | 0 | 3 | 3 |
| Merc 450SLC | 15.2 | 8 | 275.8 | 180 | 3.07 | 3.78 | 18.00 | 0 | 0 | 3 | 3 |
| Cadillac Fleetwood | 10.4 | 8 | 472.0 | 205 | 2.93 | 5.25 | 17.98 | 0 | 0 | 3 | 4 |
Realizar una operación de agregación por grupo:
# Agrupar el conjunto de datos por el número de cilindros (cyl) y calcular la media del consumo de combustible (mpg) y la potencia bruta (hp)
mtcars_group <- group_by(mtcars, cyl)
mtcars_summary <- summarize(mtcars_group, media_mpg = mean(mpg), media_hp = mean(hp))
mtcars_summary
| cyl | media_mpg | media_hp |
|---|---|---|
| <dbl> | <dbl> | <dbl> |
| 4 | 26.66364 | 82.63636 |
| 6 | 19.74286 | 122.28571 |
| 8 | 15.10000 | 209.21429 |