1. Introducción.

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:

Todos estos se combinan naturalmente con group_by() que le permite realizar cualquier operación “por grupo”.

2. Configuración.

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

3. Conjunto de datos de Iris.

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  
##                 
##                 
## 

4. Las funciones de dplyr.

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)
  )

5. El tubo

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)))

6. Tarea.

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)))

7. El entorno.

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