Capítulo5 Transformación: Estructura de un archivo y selecionar datos

Fecha de la ultima revisión

## [1] "2024-11-07"

El tema proviene de los siguientes sitios.

English: https://r4ds.had.co.nz/transform.html

Español: https://es.r4ds.hadley.nz/05-transform.html


library(tidyverse)
library(datos)
head(vuelos)
## # A tibble: 6 × 19
##    anio   mes   dia horario_salida salida_programada atraso_salida
##   <int> <int> <int>          <int>             <int>         <dbl>
## 1  2013     1     1            517               515             2
## 2  2013     1     1            533               529             4
## 3  2013     1     1            542               540             2
## 4  2013     1     1            544               545            -1
## 5  2013     1     1            554               600            -6
## 6  2013     1     1            554               558            -4
## # ℹ 13 more variables: horario_llegada <int>, llegada_programada <int>,
## #   atraso_llegada <dbl>, aerolinea <chr>, vuelo <int>, codigo_cola <chr>,
## #   origen <chr>, destino <chr>, tiempo_vuelo <dbl>, distancia <dbl>,
## #   hora <dbl>, minuto <dbl>, fecha_hora <dttm>

5.1 Evaluar el archivo el vuelo

Mirar el archivo y entender la información antes de hacer cualquier analisis/

  • Cual son las variables
  • Cuales son. los tipos de datos
    • int valores enteros,
    • dbl números reales, significa dobles
    • chr caracteres o vectores
    • dttm fecha y tiempo, minutos
    • date fecha
    • S3: POSIXct Fecha y tiempo, minutos
    • lgl valores logicos “cierto” (TRUE) y “falso” (FALSE)
    • fctr factores categoricos.

Evalua en este archivo los tipos de variables que se encuentra.

vuelos
## # A tibble: 336,776 × 19
##     anio   mes   dia horario_salida salida_programada atraso_salida
##    <int> <int> <int>          <int>             <int>         <dbl>
##  1  2013     1     1            517               515             2
##  2  2013     1     1            533               529             4
##  3  2013     1     1            542               540             2
##  4  2013     1     1            544               545            -1
##  5  2013     1     1            554               600            -6
##  6  2013     1     1            554               558            -4
##  7  2013     1     1            555               600            -5
##  8  2013     1     1            557               600            -3
##  9  2013     1     1            557               600            -3
## 10  2013     1     1            558               600            -2
## # ℹ 336,766 more rows
## # ℹ 13 more variables: horario_llegada <int>, llegada_programada <int>,
## #   atraso_llegada <dbl>, aerolinea <chr>, vuelo <int>, codigo_cola <chr>,
## #   origen <chr>, destino <chr>, tiempo_vuelo <dbl>, distancia <dbl>,
## #   hora <dbl>, minuto <dbl>, fecha_hora <dttm>

5.1.1 Cual son todos los destinos de vuelos?

  • cual función usará
unique(vuelos$destino)
##   [1] "IAH" "MIA" "BQN" "ATL" "ORD" "FLL" "IAD" "MCO" "PBI" "TPA" "LAX" "SFO"
##  [13] "DFW" "BOS" "LAS" "MSP" "DTW" "RSW" "SJU" "PHX" "BWI" "CLT" "BUF" "DEN"
##  [25] "SNA" "MSY" "SLC" "XNA" "MKE" "SEA" "ROC" "SYR" "SRQ" "RDU" "CMH" "JAX"
##  [37] "CHS" "MEM" "PIT" "SAN" "DCA" "CLE" "STL" "MYR" "JAC" "MDW" "HNL" "BNA"
##  [49] "AUS" "BTV" "PHL" "STT" "EGE" "AVL" "PWM" "IND" "SAV" "CAK" "HOU" "LGB"
##  [61] "DAY" "ALB" "BDL" "MHT" "MSN" "GSO" "CVG" "BUR" "RIC" "GSP" "GRR" "MCI"
##  [73] "ORF" "SAT" "SDF" "PDX" "SJC" "OMA" "CRW" "OAK" "SMF" "TUL" "TYS" "OKC"
##  [85] "PVD" "DSM" "PSE" "BHM" "CAE" "HDN" "BZN" "MTJ" "EYW" "PSP" "ACK" "BGR"
##  [97] "ABQ" "ILM" "MVY" "SBN" "LEX" "CHO" "TVC" "ANC" "LGA"

5.1.2 Seleciona los vuelos donde el destino es San Juan

vuelos %>%
  filter(destino=="SJU")
## # A tibble: 5,819 × 19
##     anio   mes   dia horario_salida salida_programada atraso_salida
##    <int> <int> <int>          <int>             <int>         <dbl>
##  1  2013     1     1            615               615             0
##  2  2013     1     1            628               630            -2
##  3  2013     1     1            701               700             1
##  4  2013     1     1            711               715            -4
##  5  2013     1     1            820               820             0
##  6  2013     1     1            820               820             0
##  7  2013     1     1            840               845            -5
##  8  2013     1     1            926               929            -3
##  9  2013     1     1           1202              1159             3
## 10  2013     1     1           1245              1249            -4
## # ℹ 5,809 more rows
## # ℹ 13 more variables: horario_llegada <int>, llegada_programada <int>,
## #   atraso_llegada <dbl>, aerolinea <chr>, vuelo <int>, codigo_cola <chr>,
## #   origen <chr>, destino <chr>, tiempo_vuelo <dbl>, distancia <dbl>,
## #   hora <dbl>, minuto <dbl>, fecha_hora <dttm>

5.1.3 Selecciona los vuelos donde el destino es San Juan el dia de navidad

vuelos %>%
  filter(destino=="SJU") %>%
  filter(mes==12, dia==25) %>% 
  filter(aerolinea %in% c("AA", "UA"))  #pipe Command shift M
## # A tibble: 6 × 19
##    anio   mes   dia horario_salida salida_programada atraso_salida
##   <int> <int> <int>          <int>             <int>         <dbl>
## 1  2013    12    25            736               739            -3
## 2  2013    12    25            759               805            -6
## 3  2013    12    25           1202              1206            -4
## 4  2013    12    25           1634              1630             4
## 5  2013    12    25           1908              1900             8
## 6  2013    12    25           2015              2017            -2
## # ℹ 13 more variables: horario_llegada <int>, llegada_programada <int>,
## #   atraso_llegada <dbl>, aerolinea <chr>, vuelo <int>, codigo_cola <chr>,
## #   origen <chr>, destino <chr>, tiempo_vuelo <dbl>, distancia <dbl>,
## #   hora <dbl>, minuto <dbl>, fecha_hora <dttm>

5.1.4 Selecciona los vuelos que salen de San Juan en el dia de ti cumpleaños y contabiliza cuanto hubo

df_dia_cumpl=vuelos %>%  
filter(destino =="SJU") %>% 
  filter(mes== 8, dia== 1) |> 
  nrow()

df_dia_cumpl
## [1] 19

5.1.4.1 Organizar los datos en orden de más grande a más pequeño

  • Selecciona los mes, dia, destino, atraso_salida, atraso_llegada
  • Selecciona solamente el mes de noviembre
  • Selecciona solamente los vuelos a destino de a San Juan
  • oraganiza los datos en orden de más atraso_salido de mayor a menor
names(vuelos)
##  [1] "anio"               "mes"                "dia"               
##  [4] "horario_salida"     "salida_programada"  "atraso_salida"     
##  [7] "horario_llegada"    "llegada_programada" "atraso_llegada"    
## [10] "aerolinea"          "vuelo"              "codigo_cola"       
## [13] "origen"             "destino"            "tiempo_vuelo"      
## [16] "distancia"          "hora"               "minuto"            
## [19] "fecha_hora"
vuelos %>% 
  dplyr::select(mes, dia, destino, atraso_salida, atraso_llegada) %>% 
  filter(mes==11) %>% 
filter(destino =="SJU") %>% 
  arrange(desc(atraso_salida))
## # A tibble: 429 × 5
##      mes   dia destino atraso_salida atraso_llegada
##    <int> <int> <chr>           <dbl>          <dbl>
##  1    11     7 SJU               231            190
##  2    11    28 SJU               223            235
##  3    11    23 SJU               187            154
##  4    11    24 SJU               181            188
##  5    11    23 SJU               157            165
##  6    11    12 SJU               145            127
##  7    11    10 SJU                94             88
##  8    11    24 SJU                90            112
##  9    11    30 SJU                68             59
## 10    11    21 SJU                66             42
## # ℹ 419 more rows

5.2 Temas: Reconocer y aplicar las diferentes funciones

  • Tipos de variables:

    • int: valores enteros
    • dbl: números reales
    • chr: caracteres
    • dttm: fecha y tiempo
    • lgl: valores logicos
    • fctr: factores
    • date: fecha

  • Funciones de dplyr:

    • filter() : seleccionar filas
    • arrange(): ordenar filas
    • select(): seleccionar columnas
    • summarize(): resumir conjuntos de datos
    • group_by(): agrupar por variables
library(datos)
library(tidyverse)
por_dia <- vuelos %>% # pipe
  group_by(dia) %>% # group by day
  summarise(atraso_promedio = mean(atraso_salida, na.rm = TRUE))
por_dia
## # A tibble: 31 × 2
##      dia atraso_promedio
##    <int>           <dbl>
##  1     1           14.2 
##  2     2           14.1 
##  3     3           10.8 
##  4     4            5.79
##  5     5            7.82
##  6     6            6.99
##  7     7           14.3 
##  8     8           21.8 
##  9     9           14.6 
## 10    10           18.3 
## # ℹ 21 more rows
## The median of the data set by day of the month


por_dia_2 <- vuelos %>% 
  group_by( dia) %>% 
  summarise(atraso_promedio = mean(atraso_salida, na.rm = TRUE),
            atraso_mediana = median(atraso_salida, na.rm=TRUE))
por_dia_2
## # A tibble: 31 × 3
##      dia atraso_promedio atraso_mediana
##    <int>           <dbl>          <dbl>
##  1     1           14.2              -2
##  2     2           14.1              -1
##  3     3           10.8              -2
##  4     4            5.79             -3
##  5     5            7.82             -3
##  6     6            6.99             -2
##  7     7           14.3              -1
##  8     8           21.8              -1
##  9     9           14.6              -1
## 10    10           18.3              -1
## # ℹ 21 more rows

5.3 Funciones

  • summarise = resumir conjuntos de datos
  • mean, # promedio
  • median, # mediana
  • mode, # moda
  • operaciones boolean
# El valor más común en un conjunto de datos
# Crear una función: no existe en los paquetes de R

getmode <- function(v) {
   uniqv <- unique(v)
   uniqv[which.max(tabulate(match(v, uniqv)))]
}




por_dia_3=vuelos |> 
  dplyr::select(dia, mes, atraso_salida) |> 
  group_by(dia) %>% 
  summarise(atraso_promedio = mean(atraso_salida, na.rm = TRUE),
            atraso_max=max(atraso_salida, na.rm=TRUE),
            atraso_mode = getmode(atraso_salida))
por_dia_3
## # A tibble: 31 × 4
##      dia atraso_promedio atraso_max atraso_mode
##    <int>           <dbl>      <dbl>       <dbl>
##  1     1           14.2         853          -5
##  2     2           14.1         696          -4
##  3     3           10.8         878          -4
##  4     4            5.79        545          -5
##  5     5            7.82        896          -5
##  6     6            6.99        589          -4
##  7     7           14.3         653          -5
##  8     8           21.8         520          NA
##  9     9           14.6        1301          -4
## 10    10           18.3        1126          -5
## # ℹ 21 more rows

Añadir el promedio, mediana y moda al mismo data frame

## The mode of the value
library(DescTools)

por_dia_4 <- vuelos %>%
  group_by(dia) %>% 
  summarise(atraso_promedio = mean(atraso_salida, na.rm = TRUE),
            atraso_median = median(atraso_salida, na.rm=TRUE),
            atraso_mode = getmode(atraso_salida))
por_dia_4
## # A tibble: 31 × 4
##      dia atraso_promedio atraso_median atraso_mode
##    <int>           <dbl>         <dbl>       <dbl>
##  1     1           14.2             -2          -5
##  2     2           14.1             -1          -4
##  3     3           10.8             -2          -4
##  4     4            5.79            -3          -5
##  5     5            7.82            -3          -5
##  6     6            6.99            -2          -4
##  7     7           14.3             -1          -5
##  8     8           21.8             -1          NA
##  9     9           14.6             -1          -4
## 10    10           18.3             -1          -5
## # ℹ 21 more rows

5.4 Agrupar por múltiples variables

Aquí se agrupar por día y mes

vuelos %>% 
  dplyr::select(anio, mes, dia, atraso_llegada, destino) %>% 
  filter(destino =="SJU") %>% 
  filter(mes == 12 & dia ==25) %>% 
 # filter(mes == 12) %>%
  group_by(dia, mes) %>% 
  summarise(atraso = mean(atraso_llegada, na.rm = TRUE))
## # A tibble: 1 × 3
## # Groups:   dia [1]
##     dia   mes atraso
##   <int> <int>  <dbl>
## 1    25    12   3.57