Este es un cuaderno que ilustra las principales funcionalidades de la libreria dplyr:
mutate() agrega nuevas variables que son funciones de variables existentes.
select selecciona variables en función de sus nombres.
filter() Selecciona los casos en función de sus valores
summarise Reduce múltiples valores a un único resumen.
arrange cambia el orden de las filas.
group_by Todas estas funciones se combinan de forma natural lo que permite realizar cualquier operación “por grupo”.
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
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
##
##
##
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)
)
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)))
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))