In este cuaderno se exproraran y se ilustraran las principales funcionalidades de la biblioteca dplyr. dplyr es una gramática de manipulación de datos que proporciona un conjunto consistente de verbos que lo ayudan a resolver los desafíos de manipulación de datos más comunes:
mutate(): (mutacion) grega nuevas variables que son funciones de variables existentes.
select (): (seleccionar) selecciona variables según sus nombres.
filter(): (filtar) selecciona casos en función de sus valores.
arrange(): (arreglar) cambia el orden de las filas.
Todos estos se combinan naturalmente con group_by() que le permite realizar cualquier operación “por grupo”.
Primero, necesitamos instalar la biblioteca dplyr. Asegúrate de instalarlo desde la consola.
# NO EJECUTE ESTE BLOQUE DESDE AQUÍ
#install.packages("dplyr")
Ahora, cargamos la biblioteca.
# Cargue la biblioteca dplyr
library (dplyr)
## Warning: package 'dplyr' was built under R version 4.2.3
##
## 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
Para ilustrar las funcionalidades necesitamos algunos datos como ejemplo. Utilicemos el famoso conjunto de datos de iris.
El conjunto de datos de Iris contiene cuatro características (largo y ancho de sépalos y pétalos) de 50 muestras de tres especies de Iris (Iris setosa, Iris virginica e Iris versicolor).
Esta es una ilustración de las tres especies de Iris:
Importemos los datos a nuestro cuaderno:
# Load the Iris dataset
data(iris)
¿Qué clase de objeto es iris?
class(iris)
## [1] "data.frame"
¿Cómo se puede saber su tamaño?
dim(iris)
## [1] 150 5
El resultado anterior significa que el iris se compone de 150 filas y 5 columnas.
Echemos un vistazo a su cabeza:
head(iris)
Ahora, para ver las últimas filas:
tail(iris)
¿Cuáles son las estadísticas del iris?
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
La función filter() selecciona casos según sus valores. Escojamos las filas correspondientes a la especie setosa:
#Filtrar filas
(iris_filtered <- iris %>%
filter(Species == "setosa"))
La función select() selecciona variables según sus nombres. Escojamos las columnas Sepal.Length y Sepal.Width:
# Seleccionar columnas
(iris_selected <- iris %>%
select(Sepal.Length, Sepal.Width))
Ahora, ordenemos las filas usando un atributo particular:
#Organizar (clasificar) filas
(iris_sorted <- iris %>%
arrange(Sepal.Length))
Tenga en cuenta que las filas se organizan en orden ascendente utilizando la columna que indicamos en el código.
¿Es posible ordenar filas en orden descendente? Vamos a ver.
#Organizar (clasificar) filas
(iris_sorted <- iris %>%
arrange(desc(Sepal.Length)))
La función mutate() crea nuevas columnas que son funciones de variables existentes. También puede modificar (si el nombre es el mismo que el de una columna existente) y eliminar columnas (estableciendo su valor en NULL).
#Mutar (Crear/Modificar columnas)
(iris_mutated= iris%>%
mutate(Petal.radio= Petal.Length/Petal.Width))
Asegúrese de verificar los valores de la columna Petal.Ratio en la tabla.
# Agrupar datos y resumir datos
iris_summary <- iris %>%
group_by(Species) %>%
summarise(
Avg.Sepal.Length = mean(Sepal.Length),
Min.Petal.Width = min(Petal.Width),
Max.Petal.Length = max(Petal.Length)
)
Todas las funciones de dplyr toman un marco de datos (o tibble) como primer argumento. En lugar de obligar al usuario a guardar objetos intermedios o anidar funciones, dplyr proporciona el operador %>% de magrittr.
x %>% f(y) se convierte en f(x, y) por lo que el resultado de un paso se “canaliza” al siguiente paso.
Puede usar la tubería para reescribir múltiples operaciones que puede leer de izquierda a derecha y de arriba a abajo (leyendo el operador de tubería como “entonces”).
La función resumen() calcula un resumen para cada grupo. Esto significa que comienza desde group_keys(), agregando la variable de resumen al lado derecho:
Usemos el operador de tubería para resumir el conjunto de datos del iris.
## Operaciones de encadenamiento.
(iris_result <- iris %>%
filter(Sepal.Length > 5.0) %>%
group_by(Species) %>%
summarise(Avg.Petal.Length = mean(Petal.Length)))
Escriba un fragmento para resumir el conjunto de datos del iris según Sepal.Width
(iris_result_Width <- iris %>%
filter(Sepal.Width > 2.0) %>%
group_by(Species) %>%
summarise(Avg.Sepal.Width = mean(Sepal.Width)))
sessionInfo()
## R version 4.2.1 (2022-06-23 ucrt)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19045)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=Spanish_Colombia.utf8 LC_CTYPE=Spanish_Colombia.utf8
## [3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C
## [5] LC_TIME=Spanish_Colombia.utf8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] dplyr_1.1.3
##
## loaded via a namespace (and not attached):
## [1] rstudioapi_0.14 knitr_1.42 magrittr_2.0.3 tidyselect_1.2.0
## [5] R6_2.5.1 rlang_1.1.0 fastmap_1.1.1 fansi_1.0.4
## [9] tools_4.2.1 xfun_0.38 utf8_1.2.3 cli_3.6.1
## [13] withr_2.5.0 jquerylib_0.1.4 htmltools_0.5.5 yaml_2.3.7
## [17] digest_0.6.31 tibble_3.2.1 lifecycle_1.0.3 sass_0.4.5
## [21] vctrs_0.6.1 glue_1.6.2 cachem_1.0.7 evaluate_0.20
## [25] rmarkdown_2.21 compiler_4.2.1 bslib_0.4.2 pillar_1.9.0
## [29] generics_0.1.3 jsonlite_1.8.4 pkgconfig_2.0.3