Contexto

El paquete nycflights13 contiene información sobre todos los vuelos que partieron desde Nueva York (BWR, JFK y LGA) a destinos en los Estados Unidos en 2013. Fueron 336,776 vuelos en total. Para ayudar a comprender las causas de los retrasos, también incluye otros conjuntos de datos útiles.

Este paquete incluye las siguentes tablas:

  • flights = todos los vuelos que salieron de Nueva York en 2013
  • weather = datos meteorológicos por hora de cada aeropuerto
  • planes = información de construcción de cada avión
  • airports = nombres y ubicaciones de aeropuertos
  • airlines = relación entre nombres y códigos de las aerolíneas

Fuente:
Origen de los datos

Instalar paquetes y llamar librerías

# install.packages("nycflights13")
library(nycflights13)
# install.packages("tidyverse")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

Guardar bases de datos

flights <- flights
weather <- weather
planes <- planes
airports <- airports
airlines <- airlines

Relación entre las bases de datos

Funciones básicas de Manejo de Datos

Select

La función select sirve para seleccionar columnas de una tabla (data frame).

 df1 <- flights %>% select(carrier,flight) # Selección de columnas específicas
 df2 <- flights %>% select(carrier:distance) # Selección de rango de columnas
 df3 <- flights %>% select(-carrier, -flight) # Eliminar columnas específicas
 df4 <- flights %>% select(-carrier:-distance) # Eliminar rango de columnas
 df5 <- flights %>% select(aerolinea = carrier) # Seleccionar una columna y cambia el nombre
 df6 <- flights %>% rename(aerolinea = carrier) # Cambia el nombre a una columna

Filter

La función filter sirve para seleccionar renglones de una tabla (data frame).

df7 <- flights %>% filter(dep_delay >=500) # Extrae renglones que cumplen condición
# Condicionales: Igual ==, Desigual =!=, Mayor que >, Mayor o igual que >=, Menor que <, Menor o igual que <=
# Operadores lógicos: AND &, OR |, NOT ! 
df8 <- flights %>% filter(dep_delay >=500,dep_delay <600) # Extraer renglones que cumplan con dos condiciones
df9 <- flights %>% slice(1000:1099) # Extrae los números de los renglones indicados, sin importar sus valores

Distinct

La función distinct sirve para eliminar renglones duplicados.

df10 <- distinct(flights) # Dejar solo los renglones diferentes, borra todos los repetidos.

Merge

La función merge sirve para juntar bases de datos

bdgrande <- merge(flights,airlines,by="carrier") 
bdgrande2 <- merge(bdgrande,planes, by="tailnum")

Mutate

bdgrande3 <- mutate(bdgrande2, dist_km = distance*1.609) # Agrega variables nuevas calculadas a partir de variables existentes en la base de datos

Ejercicios

1.Encuentra todos los vuelos que tuvieron un atraso en llegada de 2 horas o más.

ejercicio1 <- bdgrande2 %>% filter(arr_delay >=120)

2.Encuentra todos los vuelos que llegaron a Houston (IAH o HOU)

ejercicio2 <- bdgrande2 %>% filter(dest == "IAH" | dest == "HOU")

3.Encuentra todos los vuelos operados por United, American o Delta

ejercicio3 <- bdgrande2 %>% filter(carrier %in% c("UA","AA","DL"))

4.Encuentra todos los vuelos que despegaron en Julio, Agosto o Septiembre.

ejercicio4 <- bdgrande2 %>% filter(month %in% c(7,8,9))
ejercicio4b <- bdgrande2 %>% filter(month == 7 | month == 8 | month == 9)

5.Encuentra todos los vuelos que arrivaron más de 2 horas tarde, pero no despegaron tarde.

ejercicio5 <- bdgrande2 %>% filter(arr_delay > 120 & dep_delay <= 0)
ejercicio5b <- bdgrande2 %>% filter(arr_delay > 120 & dep_time==sched_dep_time)

6.Encuentra todos los vuelos que se retrasaron al menos 1 hora, pero que llegaron antes 30 minutos o más.

ejercicio6 <- bdgrande2 %>% filter(dep_delay >= 60 & arr_delay <= -30)

7.Encuentra todos los vuelos que salieron de entre la medianoche y las 6:00AM

ejercicio7 <- bdgrande2 %>% filter(dep_time <= 600 | dep_time == 2400)

Arrange

Es similar a filter pero en lugar de seleccionar renglones, los ordena de menor a mayor.

df11 <- arrange(bdgrande2,year.x,month,day)

Para acomodar de mayor a menor.

df12 <- arrange(bdgrande2,year.x,desc(month),day)

Summarize

Colapsa una tabla a un solo renglón.

# Obtén el retraso promedio de despeguede todos los vuelos
summarize(bdgrande2,mean(dep_delay, na.rm=TRUE))
##   mean(dep_delay, na.rm = TRUE)
## 1                      13.17979

Group by

Agrupa tabla basado en algunas columnas

# Obtener el retraso promedio de despegue por día
por_dia <- group_by(bdgrande2, year.x,month,day)
summarize(por_dia,mean(dep_delay,na.rm=TRUE))
## `summarise()` has grouped output by 'year.x', 'month'. You can override using
## the `.groups` argument.
## # A tibble: 365 × 4
## # Groups:   year.x, month [12]
##    year.x month   day `mean(dep_delay, na.rm = TRUE)`
##     <int> <int> <int>                           <dbl>
##  1   2013     1     1                           10.7 
##  2   2013     1     2                           14.4 
##  3   2013     1     3                           11.1 
##  4   2013     1     4                           10.0 
##  5   2013     1     5                            5.70
##  6   2013     1     6                            7.98
##  7   2013     1     7                            6.49
##  8   2013     1     8                            3.10
##  9   2013     1     9                            3.17
## 10   2013     1    10                            1.89
## # ℹ 355 more rows

Conclusión

Hallazgos y razones por las cualés los vuelos se retrasan

LS0tDQp0aXRsZTogIkRhdGEgV3JhbmdsaW5nIChQYXJ0ZSAxKSINCmF1dGhvcjogIkx1aXMgRMOhdmlsYSAtIEEwMTI4NTUyMSINCmRhdGU6ICIyMDI0LTAyLTE5Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IGNvc21vDQotLS0NCg0KICFbXShDOlxcVXNlcnNcXEFkcmnDoW5cXERvd25sb2Fkc1xcamZrLW5ldy10ZXJtaW5hbC1hdC1uZXcteW9yay0xLTE5MjB4MTA4MC5wbmcpDQogDQojIDxzcGFuIHN0eWxlPSAiY29sb3I6IGJsdWU7Ij5Db250ZXh0bzwvc3Bhbj4NCkVsIHBhcXVldGUgKipueWNmbGlnaHRzMTMqKiBjb250aWVuZSBpbmZvcm1hY2nDs24gc29icmUgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgcGFydGllcm9uIGRlc2RlIE51ZXZhIFlvcmsgKEJXUiwgSkZLIHkgTEdBKSBhIGRlc3Rpbm9zIGVuIGxvcyBFc3RhZG9zIFVuaWRvcyBlbiAyMDEzLiBGdWVyb24gMzM2LDc3NiB2dWVsb3MgZW4gdG90YWwuIFBhcmEgYXl1ZGFyIGEgY29tcHJlbmRlciBsYXMgY2F1c2FzIGRlIGxvcyByZXRyYXNvcywgdGFtYmnDqW4gaW5jbHV5ZSBvdHJvcyBjb25qdW50b3MgZGUgZGF0b3Mgw7p0aWxlcy4gIA0KDQogRXN0ZSBwYXF1ZXRlIGluY2x1eWUgbGFzIHNpZ3VlbnRlcyB0YWJsYXM6ICANCg0KKyBmbGlnaHRzID0gdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgc2FsaWVyb24gZGUgTnVldmEgWW9yayBlbiAyMDEzICANCisgd2VhdGhlciA9IGRhdG9zIG1ldGVvcm9sw7NnaWNvcyBwb3IgaG9yYSBkZSBjYWRhIGFlcm9wdWVydG8gIA0KKyBwbGFuZXMgPSBpbmZvcm1hY2nDs24gZGUgY29uc3RydWNjacOzbiBkZSBjYWRhIGF2acOzbiAgDQorIGFpcnBvcnRzID0gbm9tYnJlcyB5IHViaWNhY2lvbmVzIGRlIGFlcm9wdWVydG9zICANCisgYWlybGluZXMgPSByZWxhY2nDs24gZW50cmUgbm9tYnJlcyB5IGPDs2RpZ29zIGRlIGxhcyBhZXJvbMOtbmVhcyAgDQoNCiBGdWVudGU6ICANCiBbT3JpZ2VuIGRlIGxvcyBkYXRvc10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3BhY2thZ2VzL255Y2ZsaWdodHMxMy9ueWNmbGlnaHRzMTMucGRmKQ0KDQojIDxzcGFuIHN0eWxlPSAiY29sb3I6IGJsdWU7Ij5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzPC9zcGFuPg0KYGBge3J9DQojIGluc3RhbGwucGFja2FnZXMoIm55Y2ZsaWdodHMxMyIpDQpsaWJyYXJ5KG55Y2ZsaWdodHMxMykNCiMgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZTsiPkd1YXJkYXIgYmFzZXMgZGUgZGF0b3M8L3NwYW4+DQpgYGB7cn0NCmZsaWdodHMgPC0gZmxpZ2h0cw0Kd2VhdGhlciA8LSB3ZWF0aGVyDQpwbGFuZXMgPC0gcGxhbmVzDQphaXJwb3J0cyA8LSBhaXJwb3J0cw0KYWlybGluZXMgPC0gYWlybGluZXMNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSAiY29sb3I6IGJsdWU7Ij5SZWxhY2nDs24gZW50cmUgbGFzIGJhc2VzIGRlIGRhdG9zPC9zcGFuPg0KICFbXShDOlxcVXNlcnNcXEFkcmnDoW5cXERvd25sb2Fkc1xccmVsYXRpb25hbC1ueWNmbGlnaHRzLnBuZykNCiANCiMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZTsiPkZ1bmNpb25lcyBiw6FzaWNhcyBkZSBNYW5lam8gZGUgRGF0b3M8L3NwYW4+DQoNCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IGJsdWU7Ij5TZWxlY3Q8L3NwYW4+DQogTGEgZnVuY2nDs24gKnNlbGVjdCogc2lydmUgcGFyYSBzZWxlY2Npb25hciBjb2x1bW5hcyBkZSB1bmEgdGFibGEgKCpkYXRhIGZyYW1lKikuDQpgYGB7cn0NCiBkZjEgPC0gZmxpZ2h0cyAlPiUgc2VsZWN0KGNhcnJpZXIsZmxpZ2h0KSAjIFNlbGVjY2nDs24gZGUgY29sdW1uYXMgZXNwZWPDrWZpY2FzDQogZGYyIDwtIGZsaWdodHMgJT4lIHNlbGVjdChjYXJyaWVyOmRpc3RhbmNlKSAjIFNlbGVjY2nDs24gZGUgcmFuZ28gZGUgY29sdW1uYXMNCiBkZjMgPC0gZmxpZ2h0cyAlPiUgc2VsZWN0KC1jYXJyaWVyLCAtZmxpZ2h0KSAjIEVsaW1pbmFyIGNvbHVtbmFzIGVzcGVjw61maWNhcw0KIGRmNCA8LSBmbGlnaHRzICU+JSBzZWxlY3QoLWNhcnJpZXI6LWRpc3RhbmNlKSAjIEVsaW1pbmFyIHJhbmdvIGRlIGNvbHVtbmFzDQogZGY1IDwtIGZsaWdodHMgJT4lIHNlbGVjdChhZXJvbGluZWEgPSBjYXJyaWVyKSAjIFNlbGVjY2lvbmFyIHVuYSBjb2x1bW5hIHkgY2FtYmlhIGVsIG5vbWJyZQ0KIGRmNiA8LSBmbGlnaHRzICU+JSByZW5hbWUoYWVyb2xpbmVhID0gY2FycmllcikgIyBDYW1iaWEgZWwgbm9tYnJlIGEgdW5hIGNvbHVtbmENCmBgYA0KIA0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZTsiPkZpbHRlcjwvc3Bhbj4NCkxhIGZ1bmNpw7NuICpmaWx0ZXIqIHNpcnZlIHBhcmEgc2VsZWNjaW9uYXIgcmVuZ2xvbmVzIGRlIHVuYSB0YWJsYSAoKmRhdGEgZnJhbWUqKS4NCmBgYHtyfQ0KZGY3IDwtIGZsaWdodHMgJT4lIGZpbHRlcihkZXBfZGVsYXkgPj01MDApICMgRXh0cmFlIHJlbmdsb25lcyBxdWUgY3VtcGxlbiBjb25kaWNpw7NuDQojIENvbmRpY2lvbmFsZXM6IElndWFsID09LCBEZXNpZ3VhbCA9IT0sIE1heW9yIHF1ZSA+LCBNYXlvciBvIGlndWFsIHF1ZSA+PSwgTWVub3IgcXVlIDwsIE1lbm9yIG8gaWd1YWwgcXVlIDw9DQojIE9wZXJhZG9yZXMgbMOzZ2ljb3M6IEFORCAmLCBPUiB8LCBOT1QgISANCmRmOCA8LSBmbGlnaHRzICU+JSBmaWx0ZXIoZGVwX2RlbGF5ID49NTAwLGRlcF9kZWxheSA8NjAwKSAjIEV4dHJhZXIgcmVuZ2xvbmVzIHF1ZSBjdW1wbGFuIGNvbiBkb3MgY29uZGljaW9uZXMNCmRmOSA8LSBmbGlnaHRzICU+JSBzbGljZSgxMDAwOjEwOTkpICMgRXh0cmFlIGxvcyBuw7ptZXJvcyBkZSBsb3MgcmVuZ2xvbmVzIGluZGljYWRvcywgc2luIGltcG9ydGFyIHN1cyB2YWxvcmVzDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZTsiPkRpc3RpbmN0PC9zcGFuPg0KTGEgZnVuY2nDs24gKmRpc3RpbmN0KiBzaXJ2ZSBwYXJhIGVsaW1pbmFyIHJlbmdsb25lcyBkdXBsaWNhZG9zLg0KYGBge3J9DQpkZjEwIDwtIGRpc3RpbmN0KGZsaWdodHMpICMgRGVqYXIgc29sbyBsb3MgcmVuZ2xvbmVzIGRpZmVyZW50ZXMsIGJvcnJhIHRvZG9zIGxvcyByZXBldGlkb3MuDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogYmx1ZTsiPk1lcmdlPC9zcGFuPg0KTGEgZnVuY2nDs24gKm1lcmdlKiBzaXJ2ZSBwYXJhIGp1bnRhciBiYXNlcyBkZSBkYXRvcw0KYGBge3J9DQpiZGdyYW5kZSA8LSBtZXJnZShmbGlnaHRzLGFpcmxpbmVzLGJ5PSJjYXJyaWVyIikgDQpiZGdyYW5kZTIgPC0gbWVyZ2UoYmRncmFuZGUscGxhbmVzLCBieT0idGFpbG51bSIpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjpibHVlOyAiPk11dGF0ZTwvc3Bhbj4NCmBgYHtyfQ0KYmRncmFuZGUzIDwtIG11dGF0ZShiZGdyYW5kZTIsIGRpc3Rfa20gPSBkaXN0YW5jZSoxLjYwOSkgIyBBZ3JlZ2EgdmFyaWFibGVzIG51ZXZhcyBjYWxjdWxhZGFzIGEgcGFydGlyIGRlIHZhcmlhYmxlcyBleGlzdGVudGVzIGVuIGxhIGJhc2UgZGUgZGF0b3MNCmBgYA0KDQojIyBFamVyY2ljaW9zDQoxLkVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSB0dXZpZXJvbiB1biBhdHJhc28gZW4gbGxlZ2FkYSBkZSAyIGhvcmFzIG8gbcOhcy4NCmBgYHtyfQ0KZWplcmNpY2lvMSA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihhcnJfZGVsYXkgPj0xMjApDQpgYGANCiANCjIuRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIGxsZWdhcm9uIGEgSG91c3RvbiAoSUFIIG8gSE9VKQ0KYGBge3J9DQplamVyY2ljaW8yIDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGRlc3QgPT0gIklBSCIgfCBkZXN0ID09ICJIT1UiKQ0KYGBgDQoNCjMuRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3Mgb3BlcmFkb3MgcG9yIFVuaXRlZCwgQW1lcmljYW4gbyBEZWx0YQ0KYGBge3J9DQplamVyY2ljaW8zIDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGNhcnJpZXIgJWluJSBjKCJVQSIsIkFBIiwiREwiKSkNCmBgYA0KDQo0LkVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBkZXNwZWdhcm9uIGVuIEp1bGlvLCBBZ29zdG8gbyBTZXB0aWVtYnJlLg0KYGBge3J9DQplamVyY2ljaW80IDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKG1vbnRoICVpbiUgYyg3LDgsOSkpDQplamVyY2ljaW80YiA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihtb250aCA9PSA3IHwgbW9udGggPT0gOCB8IG1vbnRoID09IDkpDQpgYGANCg0KNS5FbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgYXJyaXZhcm9uIG3DoXMgZGUgMiBob3JhcyB0YXJkZSwgcGVybyBubyBkZXNwZWdhcm9uIHRhcmRlLg0KYGBge3J9DQplamVyY2ljaW81IDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGFycl9kZWxheSA+IDEyMCAmIGRlcF9kZWxheSA8PSAwKQ0KZWplcmNpY2lvNWIgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIoYXJyX2RlbGF5ID4gMTIwICYgZGVwX3RpbWU9PXNjaGVkX2RlcF90aW1lKQ0KYGBgDQoNCjYuRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIHNlIHJldHJhc2Fyb24gYWwgbWVub3MgMSBob3JhLCBwZXJvIHF1ZSBsbGVnYXJvbiBhbnRlcyAzMCBtaW51dG9zIG8gbcOhcy4NCmBgYHtyfQ0KZWplcmNpY2lvNiA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihkZXBfZGVsYXkgPj0gNjAgJiBhcnJfZGVsYXkgPD0gLTMwKQ0KYGBgDQoNCjcuRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIHNhbGllcm9uIGRlIGVudHJlIGxhIG1lZGlhbm9jaGUgeSBsYXMgNjowMEFNDQpgYGB7cn0NCmVqZXJjaWNpbzcgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIoZGVwX3RpbWUgPD0gNjAwIHwgZGVwX3RpbWUgPT0gMjQwMCkNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0gImNvbG9yOmJsdWU7ICI+QXJyYW5nZTwvc3Bhbj4NCkVzIHNpbWlsYXIgYSBmaWx0ZXIgcGVybyBlbiBsdWdhciBkZSBzZWxlY2Npb25hciByZW5nbG9uZXMsIGxvcyBvcmRlbmEgZGUgbWVub3IgYSBtYXlvci4NCmBgYHtyfQ0KZGYxMSA8LSBhcnJhbmdlKGJkZ3JhbmRlMix5ZWFyLngsbW9udGgsZGF5KQ0KYGBgDQoNClBhcmEgYWNvbW9kYXIgZGUgbWF5b3IgYSBtZW5vci4NCmBgYHtyfQ0KZGYxMiA8LSBhcnJhbmdlKGJkZ3JhbmRlMix5ZWFyLngsZGVzYyhtb250aCksZGF5KQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6Ymx1ZTsgIj5TdW1tYXJpemU8L3NwYW4+DQpDb2xhcHNhIHVuYSB0YWJsYSBhIHVuIHNvbG8gcmVuZ2zDs24uDQpgYGB7cn0NCiMgT2J0w6luIGVsIHJldHJhc28gcHJvbWVkaW8gZGUgZGVzcGVndWVkZSB0b2RvcyBsb3MgdnVlbG9zDQpzdW1tYXJpemUoYmRncmFuZGUyLG1lYW4oZGVwX2RlbGF5LCBuYS5ybT1UUlVFKSkNCmBgYA0KIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjpibHVlOyAiPkdyb3VwIGJ5PC9zcGFuPg0KQWdydXBhIHRhYmxhIGJhc2FkbyBlbiBhbGd1bmFzIGNvbHVtbmFzDQpgYGB7cn0NCiMgT2J0ZW5lciBlbCByZXRyYXNvIHByb21lZGlvIGRlIGRlc3BlZ3VlIHBvciBkw61hDQpwb3JfZGlhIDwtIGdyb3VwX2J5KGJkZ3JhbmRlMiwgeWVhci54LG1vbnRoLGRheSkNCnN1bW1hcml6ZShwb3JfZGlhLG1lYW4oZGVwX2RlbGF5LG5hLnJtPVRSVUUpKQ0KYGBgDQojIENvbmNsdXNpw7NuDQpIYWxsYXpnb3MgeSByYXpvbmVzIHBvciBsYXMgY3VhbMOpcyBsb3MgdnVlbG9zIHNlIHJldHJhc2FuDQo=