1. Introducción

En este cuaderno se explora las funcionalidades de la libreria dplyr:

-mutate() agrega nuevas variables que son funciones de variables existentes.

-select() elige variables en función de sus nombres.

-filter() Selecciona casos en función de sus valores.

-summarise() reduce varios valores a un solo resumen.

-arrange() Cambia el orden de las filas.

2. Configuración

Primero hay que instalar la libreria dplyr desde la consola. Luego cargamos la libreria:

library(dplyr)
## 
## 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. El conjunto de datos Iris

Vamos a usar un conjunto de datos muy famoso que se llama Iris. Estos datos contienen 50 registros de mediciones de 3 especies de Iris, Setosa, Virginica y Versicolor.

Ahora vamos a importar los datos a nuestro cuaderno:

data("iris")

Que 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. Ahora veamos la cabeza de los datos:

head(iris)

Ahora, veamos las ultimas filas:

tail(iris)

Cuales son las estadisticas de 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 funcionalidades de dplyr

La funcion filter() selecciona casos en funcion de sus valores. Escojamos las filas correspondientes a la especie de setosa:

(iris_filtered <- iris %>% 
 filter(Species == "setosa"))

La función select() selecciona variables en función de sus nombres. Vamos a elegir las columnas Sepal.Length y Sepal.Width:

(iris_selected <- iris %>%
   select(Sepal.Length, Sepal.Width))

Ahora, ordenemos las filas usando un atributo particular:

(iris_sorted <- iris %>%
   arrange(Sepal.Length))

Nota:Tenga en cuenta que las filas se organizan en orden ascendente utilizando la columna que indicamos en el código.

Es posible ordenar las filas en orden descendente?

(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 una columna existente) y eliminar columnas (estableciendo su valor en NULL).

(iris_mutated <- iris %>%
   mutate(Petal.Ratio = Petal.Length / Petal.Width))

Asegúrese de comprobar los valores de la columna Petal.Ratio en la tabla anterior.

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

4. The pipe / La tuberia

Todas las funciones dplyr toman un marco de datos (o tibble) como primer argumento. En lugar de forzar al usuario a guardar objetos intermedios o funciones de anidación, 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 utilizar la canalización para reescribir varias operaciones que puede leer de izquierda a derecha, de arriba a abajo (leyendo el operador de tubería como “entonces”).

La función summarise() 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/pipe para resumir el conjunto de datos del iris.

(iris_result <- iris %>%
   filter(Sepal.Length > 5.0) %>%
   group_by(Species) %>%
   summarise(Avg.Petal.Length = mean(Petal.Length)))

5. Tarea

Escribir un codigo que resuma el conjunto de datos del iris basado en Sepal.Width

(iris_summary <- iris %>% 
   group_by(Species) %>%
   summarise(
     sdPetal.Width = sd(Petal.Width) 
   ))

6. Inormación

sessionInfo()
## R version 4.3.1 (2023-06-16 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    
## 
## time zone: America/Bogota
## tzcode source: internal
## 
## 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] vctrs_0.6.3       cli_3.6.1         knitr_1.43        rlang_1.1.1      
##  [5] xfun_0.40         generics_0.1.3    jsonlite_1.8.7    glue_1.6.2       
##  [9] htmltools_0.5.6   sass_0.4.7        fansi_1.0.4       rmarkdown_2.24   
## [13] evaluate_0.21     jquerylib_0.1.4   tibble_3.2.1      fastmap_1.1.1    
## [17] yaml_2.3.7        lifecycle_1.0.3   compiler_4.3.1    pkgconfig_2.0.3  
## [21] rstudioapi_0.15.0 digest_0.6.33     R6_2.5.1          tidyselect_1.2.0 
## [25] utf8_1.2.3        pillar_1.9.0      magrittr_2.0.3    bslib_0.5.1      
## [29] withr_2.5.0       tools_4.3.1       cachem_1.0.8