1. Introduccion

Este es un cuaderno que ilustra las principales funcionalidades de la libreria dplyr:

2. Configuracion

Lo primero que vamos a hacer es cargar la libreria

library(dplyr)

3. El conjunto de datos iris

El conjunto de datos iris continene 200 registros de tres especies diferentes de flores del genero iris: Setosa, Virginica y Versicolor

Vamos a importar los datos a nuestro cuaderno

data("iris")

¿Que clase de objeto es iris?

class(iris)
[1] "data.frame"

[1] “data.frame”

Ahora examinenmos los primeros registros:

head(iris)

Ahora miremos los ultimos registros:

tail(iris)

Ahora obtengamos 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. Funcionalidades de dplyr

La funcion filter() selecciona las filas que cumplan una condicion

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

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

Ahora, vamos a ordenar las filas utilizando un atributo en particular:

# Ordenando Filas (Ascendente)
(iris_sorted <- iris %>%
  arrange(Sepal.Length))

Nota 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? Veamos.

# Ordenando Filas (Descendente)
(iris_sorted <- iris %>%
  arrange(desc(Sepal.Length)))

La función mutate() crea nuevas columnas que son funciones de variables ya 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).

# Mutando (Creando/Modificando Columnas)
(iris_mutated <- iris %>%
  mutate(Petal.Ratio = Petal.Length / Petal.Width))

Asegúrate de revisar los valores de la columna Petal.Ratio en la tabla de arriba.

# Agrupando Datos y Resumiendo 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.The pipe

Todas las funciones de dplyr toman un data frame (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 transforma en f(x, y), de modo que el resultado de un paso se “conecta” o introduce en el siguiente paso.

Puedes usar the pipe para reescribir múltiples operaciones que puedes leer de izquierda a derecha y de arriba a abajo (leyendo el operador the pipe como “luego”).

La función summarise() calcula un resumen para cada grupo. Esto significa que comienza desde group_keys(), añadiendo la variable de resumen al lado derecho:

Vamos a utilizar el operador the pipe para resumir el conjunto de datos iris.

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

6. Tarea

Escribe un bloque de código para resumir el conjunto de datos iris basándote en la variable Sepal.Width.

sessionInfo()
R version 4.6.1 (2026-06-24 ucrt)
Platform: x86_64-w64-mingw32/x64
Running under: Windows 10 x64 (build 19045)

Matrix products: default
  LAPACK version 3.12.1

locale:
[1] LC_COLLATE=Spanish_Colombia.utf8 
[2] LC_CTYPE=Spanish_Colombia.utf8   
[3] LC_MONETARY=Spanish_Colombia.utf8
[4] 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  
[7] base     

other attached packages:
[1] dplyr_1.2.1

loaded via a namespace (and not attached):
 [1] digest_0.6.39     R6_2.6.1          fastmap_1.2.0    
 [4] tidyselect_1.2.1  xfun_0.62         magrittr_2.0.5   
 [7] glue_1.8.1        tibble_3.3.1      knitr_1.52       
[10] pkgconfig_2.0.3   htmltools_0.5.9   rmarkdown_2.32   
[13] generics_0.1.4    lifecycle_1.0.5   cli_3.6.6        
[16] vctrs_0.7.3       withr_3.0.3       compiler_4.6.1   
[19] rstudioapi_0.19.0 tools_4.6.1       pillar_1.11.1    
[22] evaluate_1.0.5    yaml_2.3.12       rlang_1.3.0      

7. Explorando los Datos con glimpse()

La función glimpse() proporciona un vistazo rápido a la estructura de un conjunto de datos. Muestra las variables en filas (en lugar de columnas), su tipo de dato y los primeros valores disponibles:

# Obteniendo un vistazo de los datos
iris %>% glimpse()
Rows: 150
Columns: 5
$ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4…
$ Sepal.Width  <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3…
$ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1…
$ Petal.Width  <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0…
$ Species      <fct> setosa, setosa, setosa, setosa, setosa, setosa…
LS0tDQp0aXRsZTogIlByaW1lcm9zIHBhc29zIGNvbiBkcGx5ciINCmF1dGhvcjogIkR1dmFuIFZhcmdhcyINCmRhdGU6ICIxNS4xMC4yMDI2Ig0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyAxLiBJbnRyb2R1Y2Npb24NCg0KRXN0ZSBlcyB1biBjdWFkZXJubyBxdWUgaWx1c3RyYSBsYXMgcHJpbmNpcGFsZXMgZnVuY2lvbmFsaWRhZGVzIGRlIGxhIGxpYnJlcmlhICpkcGx5cio6DQoNCi0gKiptdXRhdGUoKSoqIGFncmVnYSBudWV2YXMgdmFyaWFibGVzIHF1ZSBzb24gZnVuY2lvbmVzIGRlIHZhcmlhYmxlcyBleGlzdGVudGVzLg0KDQotICoqc2VsZWN0Kiogc2VsZWNjaW9uYSB2YXJpYWJsZXMgZW4gZnVuY2nDs24gZGUgc3VzIG5vbWJyZXMuDQoNCi0gKipmaWx0ZXIoKSoqIFNlbGVjY2lvbmEgbG9zIGNhc29zIGVuIGZ1bmNpw7NuIGRlIHN1cyB2YWxvcmVzDQoNCi0gKipzdW1tYXJpc2UqKiBSZWR1Y2UgbcO6bHRpcGxlcyB2YWxvcmVzIGEgdW4gw7puaWNvIHJlc3VtZW4uDQoNCi0gKiphcnJhbmdlKiogY2FtYmlhIGVsIG9yZGVuIGRlIGxhcyBmaWxhcy4NCg0KLSAqKmdyb3VwX2J5KiogVG9kYXMgZXN0YXMgZnVuY2lvbmVzIHNlIGNvbWJpbmFuIGRlIGZvcm1hIG5hdHVyYWwgbG8gcXVlIHBlcm1pdGUgcmVhbGl6YXIgY3VhbHF1aWVyIG9wZXJhY2nDs24gInBvciBncnVwbyIuDQoNCiMgMi4gQ29uZmlndXJhY2lvbg0KDQpMbyBwcmltZXJvIHF1ZSB2YW1vcyBhIGhhY2VyIGVzIGNhcmdhciBsYSBsaWJyZXJpYQ0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpgYGANCg0KIyAzLiBFbCBjb25qdW50byBkZSBkYXRvcyBpcmlzDQoNCkVsIGNvbmp1bnRvIGRlIGRhdG9zIGlyaXMgY29udGluZW5lIDIwMCByZWdpc3Ryb3MgZGUgdHJlcyBlc3BlY2llcyBkaWZlcmVudGVzIGRlIGZsb3JlcyBkZWwgZ2VuZXJvIGlyaXM6ICpTZXRvc2EqLCAqVmlyZ2luaWNhKiB5ICpWZXJzaWNvbG9yKg0KDQohW10oQzovVXNlcnMvRkFNSUxJQS9QaWN0dXJlcy9JcmlzLnBuZykNCg0KDQoNCg0KVmFtb3MgYSBpbXBvcnRhciBsb3MgZGF0b3MgYSBudWVzdHJvIGN1YWRlcm5vDQoNCmBgYHtyfQ0KZGF0YSgiaXJpcyIpDQpgYGANCg0Kwr9RdWUgY2xhc2UgZGUgb2JqZXRvIGVzIGlyaXM/DQoNCmBgYHtyfQ0KY2xhc3MoaXJpcykNCmBgYA0KDQpbMV0gImRhdGEuZnJhbWUiDQoNCkFob3JhIGV4YW1pbmVubW9zIGxvcyBwcmltZXJvcyByZWdpc3Ryb3M6DQoNCmBgYHtyfQ0KaGVhZChpcmlzKQ0KYGBgDQoNCkFob3JhIG1pcmVtb3MgbG9zIHVsdGltb3MgcmVnaXN0cm9zOg0KDQpgYGB7cn0NCnRhaWwoaXJpcykNCmBgYA0KDQpBaG9yYSBvYnRlbmdhbW9zIGxhcyBlc3RhZGlzdGljYXMgZGUgaXJpcw0KDQpgYGB7cn0NCnN1bW1hcnkoaXJpcykNCmBgYA0KIyA0LiBGdW5jaW9uYWxpZGFkZXMgZGUgKmRwbHlyKg0KDQpMYSBmdW5jaW9uICoqZmlsdGVyKCkqKiBzZWxlY2Npb25hIGxhcyBmaWxhcyBxdWUgY3VtcGxhbiB1bmEgY29uZGljaW9uDQoNCmBgYHtyfQ0KKGlyaXNfZmlsdGVyZWQgPC0gaXJpcyB8PiANCiAgZmlsdGVyKFNwZWNpZXMgPT0gInNldG9zYSIpKQ0KYGBgDQoNCg0KTGEgZnVuY2nDs24gc2VsZWN0KCkgc2VsZWNjaW9uYSB2YXJpYWJsZXMgZW4gZnVuY2nDs24gZGUgc3VzIG5vbWJyZXMuIFZhbW9zIGEgZWxlZ2lyIGxhcyBjb2x1bW5hcyAqKlNlcGFsLkxlbmd0aCoqIHkgKipTZXBhbC5XaWR0aCoqOg0KDQpgYGB7cn0NCiMgU2VsZWNjaW9uYW5kbyBDb2x1bW5hcw0KKGlyaXNfc2VsZWN0ZWQgPC0gaXJpcyAlPiUNCiAgc2VsZWN0KFNlcGFsLkxlbmd0aCwgU2VwYWwuV2lkdGgpKQ0KYGBgDQoNCkFob3JhLCB2YW1vcyBhIG9yZGVuYXIgbGFzIGZpbGFzIHV0aWxpemFuZG8gdW4gYXRyaWJ1dG8gZW4gcGFydGljdWxhcjoNCg0KYGBge3J9DQojIE9yZGVuYW5kbyBGaWxhcyAoQXNjZW5kZW50ZSkNCihpcmlzX3NvcnRlZCA8LSBpcmlzICU+JQ0KICBhcnJhbmdlKFNlcGFsLkxlbmd0aCkpDQpgYGANCg0KTm90YSBxdWUgbGFzIGZpbGFzIHNlIG9yZ2FuaXphbiBlbiBvcmRlbiBhc2NlbmRlbnRlIHV0aWxpemFuZG8gbGEgY29sdW1uYSBxdWUgaW5kaWNhbW9zIGVuIGVsIGPDs2RpZ28uDQoNCsK/RXMgcG9zaWJsZSBvcmRlbmFyIGxhcyBmaWxhcyBlbiBvcmRlbiBkZXNjZW5kZW50ZT8gVmVhbW9zLg0KDQpgYGB7cn0NCiMgT3JkZW5hbmRvIEZpbGFzIChEZXNjZW5kZW50ZSkNCihpcmlzX3NvcnRlZCA8LSBpcmlzICU+JQ0KICBhcnJhbmdlKGRlc2MoU2VwYWwuTGVuZ3RoKSkpDQpgYGANCg0KTGEgZnVuY2nDs24gKiptdXRhdGUoKSoqIGNyZWEgbnVldmFzIGNvbHVtbmFzIHF1ZSBzb24gZnVuY2lvbmVzIGRlIHZhcmlhYmxlcyB5YSBleGlzdGVudGVzLiBUYW1iacOpbiBwdWVkZSBtb2RpZmljYXIgKHNpIGVsIG5vbWJyZSBlcyBlbCBtaXNtbyBxdWUgZWwgZGUgdW5hIGNvbHVtbmEgZXhpc3RlbnRlKSB5IGVsaW1pbmFyIGNvbHVtbmFzIChlc3RhYmxlY2llbmRvIHN1IHZhbG9yIGVuIE5VTEwpLg0KDQpgYGB7cn0NCiMgTXV0YW5kbyAoQ3JlYW5kby9Nb2RpZmljYW5kbyBDb2x1bW5hcykNCihpcmlzX211dGF0ZWQgPC0gaXJpcyAlPiUNCiAgbXV0YXRlKFBldGFsLlJhdGlvID0gUGV0YWwuTGVuZ3RoIC8gUGV0YWwuV2lkdGgpKQ0KYGBgDQoNCkFzZWfDunJhdGUgZGUgcmV2aXNhciBsb3MgdmFsb3JlcyBkZSBsYSBjb2x1bW5hIFBldGFsLlJhdGlvIGVuIGxhIHRhYmxhIGRlIGFycmliYS4NCg0KYGBge3J9DQojIEFncnVwYW5kbyBEYXRvcyB5IFJlc3VtaWVuZG8gRGF0b3MNCmlyaXNfc3VtbWFyeSA8LSBpcmlzICU+JQ0KICBncm91cF9ieShTcGVjaWVzKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIEF2Zy5TZXBhbC5MZW5ndGggPSBtZWFuKFNlcGFsLkxlbmd0aCksDQogICAgTWluLlBldGFsLldpZHRoID0gbWluKFBldGFsLldpZHRoKSwNCiAgICBNYXguUGV0YWwuTGVuZ3RoID0gbWF4KFBldGFsLkxlbmd0aCkNCiAgKQ0KYGBgDQoNCiMgNS5UaGUgcGlwZQ0KDQpUb2RhcyBsYXMgZnVuY2lvbmVzIGRlIGRwbHlyIHRvbWFuIHVuIGRhdGEgZnJhbWUgKG8gdGliYmxlKSBjb21vIHByaW1lciBhcmd1bWVudG8uIEVuIGx1Z2FyIGRlIG9ibGlnYXIgYWwgdXN1YXJpbyBhIGd1YXJkYXIgb2JqZXRvcyBpbnRlcm1lZGlvcyBvIGFuaWRhciBmdW5jaW9uZXMsIGRwbHlyIHByb3BvcmNpb25hIGVsIG9wZXJhZG9yICU+JSBkZSBtYWdyaXR0ci4NCg0KeCAlPiUgZih5KSBzZSB0cmFuc2Zvcm1hIGVuIGYoeCwgeSksIGRlIG1vZG8gcXVlIGVsIHJlc3VsdGFkbyBkZSB1biBwYXNvIHNlICJjb25lY3RhIiBvIGludHJvZHVjZSBlbiBlbCBzaWd1aWVudGUgcGFzby4NCg0KUHVlZGVzIHVzYXIgdGhlIHBpcGUgcGFyYSByZWVzY3JpYmlyIG3Dumx0aXBsZXMgb3BlcmFjaW9uZXMgcXVlIHB1ZWRlcyBsZWVyIGRlIGl6cXVpZXJkYSBhIGRlcmVjaGEgeSBkZSBhcnJpYmEgYSBhYmFqbyAobGV5ZW5kbyBlbCBvcGVyYWRvciB0aGUgcGlwZSBjb21vICJsdWVnbyIpLg0KDQpMYSBmdW5jacOzbiAqKnN1bW1hcmlzZSgpKiogY2FsY3VsYSB1biByZXN1bWVuIHBhcmEgY2FkYSBncnVwby4gRXN0byBzaWduaWZpY2EgcXVlIGNvbWllbnphIGRlc2RlIGdyb3VwX2tleXMoKSwgYcOxYWRpZW5kbyBsYSB2YXJpYWJsZSBkZSByZXN1bWVuIGFsIGxhZG8gZGVyZWNobzoNCg0KVmFtb3MgYSB1dGlsaXphciBlbCBvcGVyYWRvciB0aGUgcGlwZSBwYXJhIHJlc3VtaXIgZWwgY29uanVudG8gZGUgZGF0b3MgaXJpcy4NCg0KYGBge3J9DQojIEVuY2FkZW5hbmRvIE9wZXJhY2lvbmVzDQooaXJpc19yZXN1bHQgPC0gaXJpcyAlPiUNCiAgZmlsdGVyKFNlcGFsLkxlbmd0aCA+IDUuMCkgJT4lDQogIGdyb3VwX2J5KFNwZWNpZXMpICU+JQ0KICBzdW1tYXJpc2UoQXZnLlBldGFsLkxlbmd0aCA9IG1lYW4oUGV0YWwuTGVuZ3RoKSkpDQpgYGANCg0KDQojIDYuIFRhcmVhDQoNCkVzY3JpYmUgdW4gYmxvcXVlIGRlIGPDs2RpZ28gcGFyYSByZXN1bWlyIGVsIGNvbmp1bnRvIGRlIGRhdG9zIGlyaXMgYmFzw6FuZG90ZSBlbiBsYSB2YXJpYWJsZSAqKlNlcGFsLldpZHRoLioqDQoNCmBgYHtyfQ0Kc2Vzc2lvbkluZm8oKQ0KYGBgDQoNCiMgNy4gRXhwbG9yYW5kbyBsb3MgRGF0b3MgY29uICoqZ2xpbXBzZSgpKioNCg0KTGEgZnVuY2nDs24gZ2xpbXBzZSgpIHByb3BvcmNpb25hIHVuIHZpc3Rhem8gcsOhcGlkbyBhIGxhIGVzdHJ1Y3R1cmEgZGUgdW4gY29uanVudG8gZGUgZGF0b3MuIE11ZXN0cmEgbGFzIHZhcmlhYmxlcyBlbiBmaWxhcyAoZW4gbHVnYXIgZGUgY29sdW1uYXMpLCBzdSB0aXBvIGRlIGRhdG8geSBsb3MgcHJpbWVyb3MgdmFsb3JlcyBkaXNwb25pYmxlczoNCg0KYGBge3J9DQojIE9idGVuaWVuZG8gdW4gdmlzdGF6byBkZSBsb3MgZGF0b3MNCmlyaXMgJT4lIGdsaW1wc2UoKQ0KYGBgDQoNCg==