Esta es una paqueteria que ayuda al tratamiento de datos de una maneera mas legible y sencilla de lo que seria con la sintaxis oiriginal por lo que es muy util con grandes datos de informacion.

Algunas ventajas de las cuales podemos sacar provecho son:

  1. Rapido en data frame
  2. Uso de comandos legibles
  3. Intuitivo y facil de escribir

Nota: Es muy importante familiarisarce con los datos, ya que de esto depende una correcta implementacion de los codigos que se detallan a continuacion.

Existen 5 comandos basicos en esta paqueteria : filter,select,arrange,mutate,summarise y group_by

Trabajaremos con la base de datos del aeropuerto de Houston del año 2011.

library(dplyr) ## Paqueteria principal 

library(hflights) ## Aqui esta la base de datos con la que trabajaremos. 
## Warning: package 'hflights' was built under R version 4.0.3

Un analisis exploratorio de la base de datos simple muestra los siguientes resultados.

datos = tbl_df(hflights) ## Aqui solo estamos transformando los datos
                         ## A un data frame del sistema. 
head(datos)

Filter()

El primer comando filter ayuda a consultar informacion del data frame con condiciones puestas por el usuario.

filter(datos,Month==1, DayofMonth==1)

Para una consulta que incluya un o en la base de datos se redacta de la siguiente forma.Aqui podriamos agregar tanto condiciones para variables categoricas y tambien condiciones para variables numericas.

filter(datos, Month==1,UniqueCarrier %in% c("AA", "UA"))
filter(datos, Month==1,UniqueCarrier %in% c("AA", "UA"), AirTime > 60)

Notemos que no solo estamos consultando con opereadores or si no que tambien estamos usando una condicion and.

En esta libreria podemos usar las condiciones de tuveria un ejemplo haciendo una consulta un poco mas avanzada es la siguiente.

sub = datos %>%
      filter(AirTime>45 , AirTime<=100 ) %>%
      select(AirTime)
summary(sub)
##     AirTime      
##  Min.   : 46.00  
##  1st Qu.: 57.00  
##  Median : 71.00  
##  Mean   : 72.56  
##  3rd Qu.: 90.00  
##  Max.   :100.00

Select()

Para seleccionar de un dataframe algunas columnas no necesariamente consecutivas normalmente de crea un vector con el nombre de las mismas a las cuales se accedera. Con esta libreria se vuelve mas sencillo como se vera.

select(datos, DepTime, ArrTime, FlightNum)

arrange()

Este comando es usando para ordenar los datos, por defecto los ordena de menor a mayor en caso de necesitar ordenar los datos de mayor a menor se usa el comando desc()

datos %>%
  arrange(ArrTime,UniqueCarrier)

Este ejemplo es considerando un orden de menor a mayor.

datos %>%
  arrange(desc(ArrTime),UniqueCarrier)

Mutate()

Es usada para la creacion de nuevas variables dentro del data frame por ejemplo busquemos si existe la variable speed dentro del data frame.

sum(colnames(datos)=="speed")
## [1] 0

Entonces procedemos a crearla de la siguiente forma.

datos %>% 
  select(Distance, AirTime) %>%
  mutate(Speed=Distance/AirTime*60) %>% 
  arrange(desc(Speed))

Summarise()

En este apartado vamos a agrupar los datos por destino que seria una variable categorica llamada Dest dentro del set de datos.Por lo que es una funcion muy buena para hacer inferencia sobre ella.

datos %>% 
  group_by(Dest) %>%
  summarise(promedio = mean(ArrDelay,na.rm = T))

Notece que solo se le ha aplicado la funcion a un conjunto de datos reducido por lo que si se desea aplicar a mas columnas es necesario usar la funcion summarise_each.

datos %>%
  group_by(Dest) %>%
  summarise_each(funs(max(.,na.rm = T)),Cancelled,Diverted)
## Warning: funs() is soft deprecated as of dplyr 0.8.0
## Please use a list of either functions or lambdas: 
## 
##   # Simple named list: 
##   list(mean = mean, median = median)
## 
##   # Auto named with `tibble::lst()`: 
##   tibble::lst(mean, median)
## 
##   # Using lambdas
##   list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
## This warning is displayed once per session.

Notemos que en summarise_each es necesario mensionar el comando funs pues necesita explicitamente saber cuales son las funciones que se estaran usando.

datos %>%
  group_by(Dest) %>%
  summarise_each(funs(max(.,na.rm = T),min(.,na.rm = T)),
                 Cancelled,Diverted)

Algunos comandos utiles para el analisis de la cantidad de filas que le corresponden a las agrupaciones que hemos hecho son.

  1. n() : Cuenta el numero de filas de un grupo
  2. n_distinct(vector): Cuenta el numero de elementos unicos en un item.
datos %>%
    group_by(Month, DayofMonth) %>% ## Agrupacion Multiple. 
    summarise(flight_count = n()) %>%
    arrange(desc(flight_count))

Una aplicacion util a estos comandos vistos hasta hora es la siguiente forma. Vamos a selecionar los vuelos cancelados por destino.

datos %>%
  group_by(Dest) %>%
  select(Cancelled) %>%
  table() %>% ## Aqui hicimos una tabla porque los valores de la variable
              ## cancelled son dos. 
  head()
## Adding missing grouping variables: `Dest`
##      Cancelled
## Dest     0    1
##   ABQ 2787   25
##   AEX  712   12
##   AGS    1    0
##   AMA 1265   32
##   ANC  125    0
##   ASE  120    5

Podemos simplificar el comando n() usando la funcion tally(sort=T) que nos ayuda a simplificar el codigo que hemos presentado con anterioridad.

datos %>%
  group_by(Month) %>%
  arrange(DayofMonth)%>%
  tally(sort = T)

Plus

Para tomar una muestra aleatoria de la base de datos se usa el siguiente comando.

Notemos que estamos dando explicitamnte el numero de filas que deseamos.

datos %>% sample_n(5)

Ahora para tener una fraccion del set de datos aleatoriamente se usa el siguiente comando.

datos %>% sample_frac(0.01,replace = F) %>%dim()
## [1] 2275   21

En dplyr se tiene la funcion glipse() que es mejor que str(), basicamente es un comando para analizar por columnas.

datos %>% glimpse()
## Rows: 227,496
## Columns: 21
## $ Year              <int> 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2011, 2...
## $ Month             <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...
## $ DayofMonth        <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15...
## $ DayOfWeek         <int> 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1...
## $ DepTime           <int> 1400, 1401, 1352, 1403, 1405, 1359, 1359, 1355, 1...
## $ ArrTime           <int> 1500, 1501, 1502, 1513, 1507, 1503, 1509, 1454, 1...
## $ UniqueCarrier     <chr> "AA", "AA", "AA", "AA", "AA", "AA", "AA", "AA", "...
## $ FlightNum         <int> 428, 428, 428, 428, 428, 428, 428, 428, 428, 428,...
## $ TailNum           <chr> "N576AA", "N557AA", "N541AA", "N403AA", "N492AA",...
## $ ActualElapsedTime <int> 60, 60, 70, 70, 62, 64, 70, 59, 71, 70, 70, 56, 6...
## $ AirTime           <int> 40, 45, 48, 39, 44, 45, 43, 40, 41, 45, 42, 41, 4...
## $ ArrDelay          <int> -10, -9, -8, 3, -3, -7, -1, -16, 44, 43, 29, 5, -...
## $ DepDelay          <int> 0, 1, -8, 3, 5, -1, -1, -5, 43, 43, 29, 19, -2, -...
## $ Origin            <chr> "IAH", "IAH", "IAH", "IAH", "IAH", "IAH", "IAH", ...
## $ Dest              <chr> "DFW", "DFW", "DFW", "DFW", "DFW", "DFW", "DFW", ...
## $ Distance          <int> 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,...
## $ TaxiIn            <int> 7, 6, 5, 9, 9, 6, 12, 7, 8, 6, 8, 4, 6, 5, 6, 12,...
## $ TaxiOut           <int> 13, 9, 17, 22, 9, 13, 15, 12, 22, 19, 20, 11, 13,...
## $ Cancelled         <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...
## $ CancellationCode  <chr> "", "", "", "", "", "", "", "", "", "", "", "", "...
## $ Diverted          <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0...

Comentarios Finales: Usar la libreria tidyverse parecera identica a esta pues varios de los comandos que estan en este paper son parte tambien de dplyr.