Contexto

El paquete nycflights13 contiene información sobre todos los vuelos que partieron desde Nueva York (EWR, 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 sigueintes tablas:

  • fligths = 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 nombre 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.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ 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

library(nycflights13)
flights <- flights
weather <- weather
planes <- planes
airports <- airports
airlines <- airlines

Relación entre bases de datos

Funciones básicas de manejo de datos

Select

La función 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) # Renombrar la columna y seleccionar columna
df6 <- flights %>% rename(aerolinea = carrier) # Renombrar columna

Filter

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

# Igual ==, Desigual=!=, mayor que >, menor que<, mayor o igual que>=, menor o igual que<=
# Operadores lógicos: AND &, OR |, NOT !
df7 <- flights %>% filter(dep_delay>=500)
df8 <- flights %>% filter(dep_delay>=500, dep_delay <600) # Extraer renglones que cumplan dos condiciones
df9 <- flights %>% slice(1000:1099) # Extraer el número de los rengolnes inidcados

Distinct

La función distinct sirve para eliminar renglones duplicados.

df10 <- distinct(flights) # Dejar sólo renglones doferentes, borra 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 de 2 horas o más.
ejercicio1 <- bdgrande3 %>% filter(arr_delay>=120)
  1. Encuentra todos los vuelos que llegaron a Houston
ejercicio2 <- bdgrande3 %>% filter(dest=="IAH" | dest=="HOU")
  1. Encuentra todos los vuelos operados por United, american o Delta
ejercicio3 <- bdgrande3 %>% filter(carrier %in% c("UA", "AA", "DL"))
  1. Encuentra todos los vuelos que despegaron en Julio, Agosto o Septiembre.
ejercicio4 <- bdgrande3 %>% filter(month %in% c("7", "8", "9"))
  1. Encuentra todos los vuelos que arrivaron más de 2 horas tarde, pero no despegaron tarde.
ejercicio5 <- bdgrande3 %>% filter(arr_delay>120 & dep_delay<=0)
  1. Encuentra todos los vuelos que se retrasaron al menos 1 hora, pero que llegaron antes 30 minutos o más.
ejercicio6 <- bdgrande3 %>% filter(dep_delay>=60 & arr_delay<=-30)
  1. Encuentra todos los vuelos que salieron entre la medianoche y las 6 a.m.
ejercicio7 <- bdgrande3 %>% filter(dep_time==2400 | dep_time<=600)

Arrange

Similar a filter() pero en lugar de seleccionar renglones, los ordena de menor a mayor.

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

Para acomodar de mayor a menor.

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

Summarize

Colapsa una tabla a un sólo renglón.

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

Group by

Agru´pa tabla basado en algunas columnas.

# Obtener el retraso promedio de despegue por día
por_dia <- group_by(bdgrande3, 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
LS0tDQp0aXRsZTogIkRhdGEgV3JhbmdsaW5nIChQYXJ0ZSAxKSINCmF1dGhvcjogIklrZXIgVmlsbGFmYcOxYSAtIEEwMDU3Mzc1NiINCmRhdGU6ICIyMDI0LTAyLTE5Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IHlldGkNCi0tLQ0KIVtdKEM6XFxVc2Vyc1xcVXN1YXJpb1xcRG93bmxvYWRzXFwwYTg1ZjcxZTEwMTFkNzQyMzhiNzg1ZDliNTQwMTg5OS5naWYpDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+Q29udGV4dG88L3NwYW4+DQpFbCBwYXF1ZXRlICoqbnljZmxpZ2h0czEzKiogY29udGllbmUgaW5mb3JtYWNpw7NuIHNvYnJlIHRvZG9zIGxvcyB2dWVsb3MgcXVlIHBhcnRpZXJvbiBkZXNkZSBOdWV2YSBZb3JrIChFV1IsIEpGSyB5IExHQSkgYSBkZXN0aW5vcyBlbiBsb3MgRXN0YWRvcyBVbmlkb3MgZW4gMjAxMy4gIEZ1ZXJvbiAzMzYsNzc2IHZ1ZWxvcyBlbiB0b3RhbC4gUGFyYSBheXVkYXIgYSBjb21wcmVuZGVyIGxhcyBjYXVzYXMgZGUgbG9zIHJldHJhc29zLCB0YW1iacOpbiBpbmNsdXllIG90cm9zIGNvbmp1bnRvcyBkZSBkYXRvcyDDunRpbGVzLiAgDQoNCkVzdGUgcGFxdWV0ZSBpbmNsdXllIGxhcyBzaWd1ZWludGVzIHRhYmxhczoNCg0KKyAqKipmbGlndGhzKioqID0gdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgc2FsaWVyb24gZGUgTnVldmEgWW9yayBlbiAyMDEzICANCisgKioqd2VhdGhlcioqKiA9IGRhdG9zIG1ldGVvcm9sw7NnaWNvcyBwb3IgaG9yYSBkZSBjYWRhIGFlcm9wdWVydG8gIA0KKyAqKipwbGFuZXMqKiogPSBpbmZvcm1hY2nDs24gZGUgY29uc3RydWNjacOzbiBkZSBjYWRhIGF2acOzbiAgDQorICoqKmFpcnBvcnRzKioqID0gbm9tYnJlcyB5IHViaWNhY2lvbmVzIGRlIGFlcm9wdWVydG9zICANCisgKioqYWlybGluZXMqKiogPSByZWxhY2nDs24gZW50cmUgbm9tYnJlIHkgY8OzZGlnb3MgZGUgbGFzIGFlcm9sw61uZWFzICANCg0KDQpGdWVudGU6ICANCltPcmlnZW4gZGUgbG9zIGRhdG9zXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvbnljZmxpZ2h0czEzL2luZGV4Lmh0bWwpDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+SW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hczwvc3Bhbj4NCmBgYHtyfQ0KI2luc3RhbGwucGFja2FnZXMoIm55Y2ZsaWdodHMxMyIpDQpsaWJyYXJ5KG55Y2ZsaWdodHMxMykNCiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpgYGANCg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPkd1YXJkYXIgYmFzZXMgZGUgZGF0b3M8L3NwYW4+DQpgYGB7cn0NCmxpYnJhcnkobnljZmxpZ2h0czEzKQ0KZmxpZ2h0cyA8LSBmbGlnaHRzDQp3ZWF0aGVyIDwtIHdlYXRoZXINCnBsYW5lcyA8LSBwbGFuZXMNCmFpcnBvcnRzIDwtIGFpcnBvcnRzDQphaXJsaW5lcyA8LSBhaXJsaW5lcw0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+UmVsYWNpw7NuIGVudHJlIGJhc2VzIGRlIGRhdG9zPC9zcGFuPg0KIVtdKEM6XFxVc2Vyc1xcVXN1YXJpb1xcRG93bmxvYWRzXFxDYXB0dXJhIGRlIHBhbnRhbGxhIDIwMjQtMDItMTkgMTIxNzI1LnBuZykNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5GdW5jaW9uZXMgYsOhc2ljYXMgZGUgbWFuZWpvIGRlIGRhdG9zPC9zcGFuPg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPlNlbGVjdDwvc3Bhbj4NCkxhIGZ1bmNpw7NuIHNpcnZlIHBhcmEgc2VsZWNjaW9uYXIgY29sdW1uYXMgZGUgdW5hIHRhYmxhICgqZGF0YSBmcmFtZSopDQpgYGB7cn0NCmRmMSA8LSBmbGlnaHRzICU+JSBzZWxlY3QoY2FycmllciwgZmxpZ2h0KSAjIFNlbGVjY2nDs24gZGUgY29sdW1uYXMgZXNwZWPDrWZpY2FzDQpkZjIgPC0gZmxpZ2h0cyAlPiUgc2VsZWN0KGNhcnJpZXI6ZGlzdGFuY2UpICMgU2VsZWNjacOzbiBkZSByYW5nbyBkZSBjb2x1bW5hcw0KZGYzIDwtIGZsaWdodHMgJT4lIHNlbGVjdCgtY2FycmllciwgLWZsaWdodCkgIyBFbGltaW5hciBjb2x1bW5hcyBlc3BlY8OtZmljYXMNCmRmNCA8LSBmbGlnaHRzICU+JSBzZWxlY3QoLWNhcnJpZXI6LWRpc3RhbmNlKSAjIEVsaW1pbmFyIHJhbmdvIGRlIGNvbHVtbmFzDQpkZjUgPC0gZmxpZ2h0cyAlPiUgc2VsZWN0KGFlcm9saW5lYSA9IGNhcnJpZXIpICMgUmVub21icmFyIGxhIGNvbHVtbmEgeSBzZWxlY2Npb25hciBjb2x1bW5hDQpkZjYgPC0gZmxpZ2h0cyAlPiUgcmVuYW1lKGFlcm9saW5lYSA9IGNhcnJpZXIpICMgUmVub21icmFyIGNvbHVtbmENCmBgYA0KDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+RmlsdGVyPC9zcGFuPg0KTGEgZnVuY2nDs24gZmlsdGVyIHNpcnZlIHBhcmEgc2VsZWNjaW9uYXIgcmVuZ2xvbmVzIGRlIHVuYSB0YWJsYSAoKmRhdGEgZnJhbWUgKikNCmBgYHtyfQ0KIyBJZ3VhbCA9PSwgRGVzaWd1YWw9IT0sIG1heW9yIHF1ZSA+LCBtZW5vciBxdWU8LCBtYXlvciBvIGlndWFsIHF1ZT49LCBtZW5vciBvIGlndWFsIHF1ZTw9DQojIE9wZXJhZG9yZXMgbMOzZ2ljb3M6IEFORCAmLCBPUiB8LCBOT1QgIQ0KZGY3IDwtIGZsaWdodHMgJT4lIGZpbHRlcihkZXBfZGVsYXk+PTUwMCkNCmRmOCA8LSBmbGlnaHRzICU+JSBmaWx0ZXIoZGVwX2RlbGF5Pj01MDAsIGRlcF9kZWxheSA8NjAwKSAjIEV4dHJhZXIgcmVuZ2xvbmVzIHF1ZSBjdW1wbGFuIGRvcyBjb25kaWNpb25lcw0KZGY5IDwtIGZsaWdodHMgJT4lIHNsaWNlKDEwMDA6MTA5OSkgIyBFeHRyYWVyIGVsIG7Dum1lcm8gZGUgbG9zIHJlbmdvbG5lcyBpbmlkY2Fkb3MNCg0KYGBgDQoNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5EaXN0aW5jdDwvc3Bhbj4NCkxhIGZ1bmNpw7NuICpkaXN0aW5jdCogc2lydmUgcGFyYSBlbGltaW5hciByZW5nbG9uZXMgZHVwbGljYWRvcy4NCmBgYHtyfQ0KZGYxMCA8LSBkaXN0aW5jdChmbGlnaHRzKSAjIERlamFyIHPDs2xvIHJlbmdsb25lcyBkb2ZlcmVudGVzLCBib3JyYSBsb3MgcmVwZXRpZG9zLg0KYGBgDQoNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5NZXJnZTwvc3Bhbj4NCkxhIGZ1bmNpw7NuICptZXJnZSogc2lydmUgcGFyYSBqdW50YXIgYmFzZXMgZGUgZGF0b3MuDQpgYGB7cn0NCmJkZ3JhbmRlIDwtIG1lcmdlKGZsaWdodHMsYWlybGluZXMsIGJ5PSJjYXJyaWVyIikNCmJkZ3JhbmRlMiA8LSBtZXJnZShiZGdyYW5kZSwgcGxhbmVzLCBieT0idGFpbG51bSIpDQpgYGANCg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPk11dGF0ZTwvc3Bhbj4NCmBgYHtyfQ0KYmRncmFuZGUzIDwtIG11dGF0ZShiZGdyYW5kZTIsIGRpc3RfS20gPSBkaXN0YW5jZSoxLjYwOSkNCiMgQWdyZWdhIHZhcmlhYmxlcyBudWV2YXMgY2FsY3VsYWRhcyBhIHBhcnRpciBkZSB2YXJpYWJsZXMgZXhpc3RlbnRlcyBlbiBsYSBiYXNlIGRlIGRhdG9zDQpgYGANCg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPkVqZXJjaWNpb3M8L3NwYW4+DQoxLiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgdHV2aWVyb24gdW4gYXRyYXNvIGRlIDIgaG9yYXMgbyBtw6FzLg0KYGBge3J9DQplamVyY2ljaW8xIDwtIGJkZ3JhbmRlMyAlPiUgZmlsdGVyKGFycl9kZWxheT49MTIwKQ0KDQpgYGANCg0KDQoyLiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgbGxlZ2Fyb24gYSBIb3VzdG9uDQpgYGB7cn0NCmVqZXJjaWNpbzIgPC0gYmRncmFuZGUzICU+JSBmaWx0ZXIoZGVzdD09IklBSCIgfCBkZXN0PT0iSE9VIikNCg0KYGBgDQoNCg0KMy4gRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3Mgb3BlcmFkb3MgcG9yIFVuaXRlZCwgYW1lcmljYW4gbyBEZWx0YQ0KYGBge3J9DQplamVyY2ljaW8zIDwtIGJkZ3JhbmRlMyAlPiUgZmlsdGVyKGNhcnJpZXIgJWluJSBjKCJVQSIsICJBQSIsICJETCIpKQ0KDQpgYGANCg0KDQo0LiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgZGVzcGVnYXJvbiBlbiBKdWxpbywgQWdvc3RvIG8gU2VwdGllbWJyZS4NCmBgYHtyfQ0KZWplcmNpY2lvNCA8LSBiZGdyYW5kZTMgJT4lIGZpbHRlcihtb250aCAlaW4lIGMoIjciLCAiOCIsICI5IikpDQoNCmBgYA0KDQoNCjUuIEVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBhcnJpdmFyb24gbcOhcyBkZSAyIGhvcmFzIHRhcmRlLCBwZXJvIG5vIGRlc3BlZ2Fyb24gdGFyZGUuDQpgYGB7cn0NCmVqZXJjaWNpbzUgPC0gYmRncmFuZGUzICU+JSBmaWx0ZXIoYXJyX2RlbGF5PjEyMCAmIGRlcF9kZWxheTw9MCkNCg0KYGBgDQoNCg0KNi4gRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIHNlIHJldHJhc2Fyb24gYWwgbWVub3MgMSBob3JhLCBwZXJvIHF1ZSBsbGVnYXJvbiBhbnRlcyAzMCBtaW51dG9zIG8gbcOhcy4NCmBgYHtyfQ0KZWplcmNpY2lvNiA8LSBiZGdyYW5kZTMgJT4lIGZpbHRlcihkZXBfZGVsYXk+PTYwICYgYXJyX2RlbGF5PD0tMzApDQoNCmBgYA0KDQoNCjcuIEVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBzYWxpZXJvbiBlbnRyZSBsYSBtZWRpYW5vY2hlIHkgbGFzIDYgYS5tLiANCmBgYHtyfQ0KZWplcmNpY2lvNyA8LSBiZGdyYW5kZTMgJT4lIGZpbHRlcihkZXBfdGltZT09MjQwMCB8IGRlcF90aW1lPD02MDApDQoNCmBgYA0KDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+QXJyYW5nZTwvc3Bhbj4NClNpbWlsYXIgYSBmaWx0ZXIoKSBwZXJvIGVuIGx1Z2FyIGRlIHNlbGVjY2lvbmFyIHJlbmdsb25lcywgbG9zIG9yZGVuYSBkZSBtZW5vciBhIG1heW9yLg0KYGBge3J9DQpkZjExIDwtIGFycmFuZ2UoYmRncmFuZGUzLCB5ZWFyLngsIG1vbnRoLCBkYXkpDQoNCmBgYA0KDQoNClBhcmEgYWNvbW9kYXIgZGUgbWF5b3IgYSBtZW5vci4NCmBgYHtyfQ0KZGYxMiA8LSBhcnJhbmdlKGJkZ3JhbmRlMywgeWVhci54LCBkZXNjKG1vbnRoKSwgZGF5KQ0KYGBgDQoNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5TdW1tYXJpemU8L3NwYW4+DQpDb2xhcHNhIHVuYSB0YWJsYSBhIHVuIHPDs2xvIHJlbmdsw7NuLg0KYGBge3J9DQojIE9idMOpbiBlbCByZXRyYXNvIHByb21lZGlvIGRlIHNhbGlkYSBkZSB0b2RvcyBsb3MgdnVlbG9zDQpzdW1tYXJpemUoYmRncmFuZGUzLCBtZWFuKGRlcF9kZWxheSwgbmEucm09VFJVRSkpDQpgYGANCg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPkdyb3VwIGJ5PC9zcGFuPg0KQWdydcK0cGEgdGFibGEgYmFzYWRvIGVuIGFsZ3VuYXMgY29sdW1uYXMuDQpgYGB7cn0NCiMgT2J0ZW5lciBlbCByZXRyYXNvIHByb21lZGlvIGRlIGRlc3BlZ3VlIHBvciBkw61hDQpwb3JfZGlhIDwtIGdyb3VwX2J5KGJkZ3JhbmRlMywgeWVhci54LCBtb250aCwgZGF5KQ0Kc3VtbWFyaXplKHBvcl9kaWEsbWVhbihkZXBfZGVsYXksIG5hLnJtPVRSVUUpKQ0KYGBgDQoNCg==