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)
## 
## Adjuntando el paquete: '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

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

C:
C:

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. Función adicional: slice_max()

La función slice_max() selecciona las filas que tienen los valores más altos de una variable. Sirve para saber cuáles son los “mejores” casos de un conjunto de datos, ya sea en todo el dataset o dentro de cada grupo.

Seleccionemos las 5 flores con los pétalos más largos de todo el dataset:

# Seleccionar las filas con los valores más grandes
(iris_top5 <- iris %>%
  slice_max(Petal.Length, n = 5, with_ties = FALSE))

Ahora combinémosla con group_by() para obtener las 3 flores con los pétalos más largos dentro de cada especie:

# Las 3 primeras filas de cada grupo
(iris_top3_species <- iris %>%
  group_by(Species) %>%
  slice_max(Petal.Length, n = 3, with_ties = FALSE) %>%
  ungroup())

Su contraparte, slice_min(), selecciona las filas con los valores más bajos:

# Seleccionar las filas con los valores más pequeños
(iris_bottom3 <- iris %>%
  slice_min(Sepal.Width, n = 3, with_ties = FALSE))