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 siguientes 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 

Relacion entre base 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) # Selecciona una columna y le 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). La función slice sirve para seleccionar filas en especifico (data frame).

df7 <- flights %>% filter(dep_delay >=500) # Extrae renglones que cumplan condición 

# 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) # Extrae renglones que cumplan 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 sólo 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_mts = 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)
  1. 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"))

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

ejercicio4a <- bdgrande2 %>% filter(month == 7 | month == 8 | month == 9)

ejercicio4b <- bdgrande2 %>% filter(month %in% c(7:9))

Ejercicio 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)

Ejercicio 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)

Ejercicio 7. Encuentra todos los vuelos que salieron entre la medianoche y las 6 a.m.

ejercicio7 <- bdgrande2 %>% 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(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 sólo renglón

# Obtén el retraso promedio de despegue de 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
LS0tDQp0aXRsZTogIkRhdGEgV3JhbmdsaW5nIChQYXJ0ZSAxKSINCmF1dGhvcjogIkFkcmnDoW4gR2FyemEgLSBBMDEyODU0MTIiDQpkYXRlOiAiMjAyNC0wMi0xOSINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiB5ZXRpDQotLS0NCg0KIVtdKEM6XFxVc2Vyc1xcQm9vdENhbXBcXERvd25sb2Fkc1xcYXZpb24gMi5qZmlmKQ0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogQmx1ZTsiPkNvbnRleHRvPC9zcGFuPiANCkVsIHBhcXVldGUgKipueWNmbGlnaHRzMTMqKiBjb250aWVuZSBpbmZvcm1hY2nDs24gc29icmUgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgcGFydGllcm9uIGRlc2RlIE51ZXZhIFlvcmsgKEVXUiwgSkZLIFkgTEdBKSBhIGRlc3Rpbm9zIGVuIGxvcyBFc3RhZG9zIFVuaWRvcyBlbiAyMDEzLiBGdWVyb24gMzM2LDc3NiB2dWVsb3MgZW4gdG90YWwuIFBhcmEgYXl1ZGFyIGEgY29tcHJlbmRlciBsYXMgY2F1c2FzIGRlIGxvcyByZXRyYXNvcywgdGFtYmnDqW4gaW5jbHV5ZSBvdHJvcyBjb25qdW50b3MgZGUgZGF0b3Mgw7p0aWxlcy4gIA0KDQpFc3RlIHBhcXVldGUgaW5jbHV5ZSBsYXMgc2lndWllbnRlcyB0YWJsYXM6IA0KDQorIGZsaWdodHMgPSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBzYWxpZXJvbiBkZSBOdWV2YSBZb3JrIGVuIDIwMTMgICANCisgd2VhdGhlciA9IGRhdG9zIG1ldGVvcm9sw7NnaWNvcyBwb3IgaG9yYSBkZSBjYWRhIGFlcm9wdWVydG8NCisgcGxhbmVzID0gaW5mb3JtYWNpw7NuIGRlIGNvbnN0cnVjY2nDs24gZGUgY2FkYSBhdmnDs24gIA0KKyBhaXJwb3J0cyA9IG5vbWJyZXMgeSB1YmljYWNpb25lcyBkZSBhZXJvcHVlcnRvcw0KKyBhaXJsaW5lcyA9IHJlbGFjacOzbiBlbnRyZSBub21icmVzIHkgY8OzZGlnb3MgZGUgbGFzIGFlcm9sw61uZWFzIA0KDQpGdWVudGU6ICAgIA0KW09yaWdlbiBkZSBsb3MgZGF0b3NdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9ueWNmbGlnaHRzMTMvbnljZmxpZ2h0czEzLnBkZikNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IEJsdWU7Ij5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzPC9zcGFuPg0KYGBge3J9DQojIGluc3RhbGwucGFja2FnZXMoIm55Y2ZsaWdodHMxMyIpDQpsaWJyYXJ5KG55Y2ZsaWdodHMxMykNCiMgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KYGBgDQoNCg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogQmx1ZTsiPkd1YXJkYXIgYmFzZXMgZGUgZGF0b3M8L3NwYW4+DQpgYGB7cn0NCmZsaWdodHMgPC0gZmxpZ2h0cw0Kd2VhdGhlciA8LSB3ZWF0aGVyDQpwbGFuZXMgPC0gcGxhbmVzDQphaXJwb3J0cyA8LSBhaXJwb3J0cw0KYWlybGluZXMgPC0gYWlybGluZXMgDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IEJsdWU7Ij5SZWxhY2lvbiBlbnRyZSBiYXNlIGRlIGRhdG9zPC9zcGFuPg0KDQohW10oQzpcXFVzZXJzXFxCb290Q2FtcFxcRG93bmxvYWRzXFxyZWxhdGlvbmFsLW55Y2ZsaWdodHMucG5nKQ0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogQmx1ZTsiPkZ1bmNpb25lcyBCw6FzaWNhcyBkZSBNYW5lam8gZGUgRGF0b3M8L3NwYW4+DQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogQmx1ZTsiPlNlbGVjdDwvc3Bhbj4NCkxhIGZ1bmNpw7NuICpzZWxlY3QqIHNpcnZlIHBhcmEgc2VsZWNjaW9uYXIgY29sdW1uYXMgZGUgdW5hIHRhYmxhICgqZGF0YSBmcmFtZSopLg0KYGBge3J9DQpkZjEgPC0gZmxpZ2h0cyAlPiUgc2VsZWN0KGNhcnJpZXIsIGZsaWdodCkgIyBTZWxlY2Npw7NuIGRlIGNvbHVtbmFzIGVzcGVjw61maWNhcw0KZGYyIDwtIGZsaWdodHMgJT4lIHNlbGVjdChjYXJyaWVyOmRpc3RhbmNlKSAjIFNlbGVjY2nDs24gZGUgcmFuZ28gZGUgY29sdW1uYXMgDQpkZjMgPC0gZmxpZ2h0cyAlPiUgc2VsZWN0KC1jYXJyaWVyLCAtZmxpZ2h0KSAjIEVsaW1pbmFyIGNvbHVtbmFzIGVzcGVjw61maWNhcyANCmRmNCA8LSBmbGlnaHRzICU+JSBzZWxlY3QoLWNhcnJpZXI6LWRpc3RhbmNlKSAjIEVsaW1pbmFyIHJhbmdvIGRlIGNvbHVtbmFzIA0KZGY1IDwtIGZsaWdodHMgJT4lIHNlbGVjdChhZXJvbGluZWEgPSBjYXJyaWVyKSAjIFNlbGVjY2lvbmEgdW5hIGNvbHVtbmEgeSBsZSBjYW1iaWEgZWwgbm9tYnJlIA0KZGY2IDwtIGZsaWdodHMgJT4lIHJlbmFtZShhZXJvbGluZWEgPWNhcnJpZXIpICMgQ2FtYmlhIGVsIG5vbWJyZSBhIHVuYSBjb2x1bW5hIA0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogQmx1ZTsiPkZpbHRlcjwvc3Bhbj4NCkxhIGZ1bmNpw7NuICpmaWx0ZXIqIHNpcnZlIHBhcmEgc2VsZWNjaW9uYXIgcmVuZ2xvbmVzIGRlIHVuYSB0YWJsYSAoKmRhdGEgZnJhbWUqKS4NCkxhIGZ1bmNpw7NuICpzbGljZSogc2lydmUgcGFyYSBzZWxlY2Npb25hciBmaWxhcyBlbiBlc3BlY2lmaWNvICgqZGF0YSBmcmFtZSopLg0KYGBge3J9DQpkZjcgPC0gZmxpZ2h0cyAlPiUgZmlsdGVyKGRlcF9kZWxheSA+PTUwMCkgIyBFeHRyYWUgcmVuZ2xvbmVzIHF1ZSBjdW1wbGFuIGNvbmRpY2nDs24gDQoNCiMgSWd1YWwgPT0gLCBEZXNpZ3VhbCA9IT0gLCBNYXlvciBxdWUgPiAsIE1heW9yIG8gaWd1YWwgcXVlID49ICwgTWVub3IgcXVlIDwgLCBNZW5vciBvIGlndWFsIHF1ZSA8PSANCiMgT3BlcmFkb3JlcyBsw7NnaWNvczogQU5EICYsIE9SIHwgLCBOT1QgISANCg0KDQpkZjggPC0gZmxpZ2h0cyAlPiUgZmlsdGVyKGRlcF9kZWxheSA+PTUwMCxkZXBfZGVsYXk8NjAwKSAjIEV4dHJhZSByZW5nbG9uZXMgcXVlIGN1bXBsYW4gZG9zIGNvbmRpY2lvbmVzIA0KZGY5IDwtIGZsaWdodHMgJT4lIHNsaWNlKDEwMDA6MTA5OSkgIyBFeHRyYWUgbG9zIG7Dum1lcm9zIGRlIGxvcyByZW5nbG9uZXMgaW5kaWNhZG9zLCBzaW4gaW1wb3J0YXIgc3VzIHZhbG9yZXMgDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBCbHVlOyI+RGlzdGluY3Q8L3NwYW4+DQpMYSBmdW5jacOzbiAqZGlzdGluY3QqIHNpcnZlIHBhcmEgZWxpbWluYXIgcmVuZ2xvbmVzIGR1cGxpY2Fkb3MuDQpgYGB7cn0NCmRmMTAgPC0gZGlzdGluY3QoZmxpZ2h0cykgIyBEZWphciBzw7NsbyBsb3MgcmVuZ2xvbmVzIGRpZmVyZW50ZXMsIGJvcnJhIHRvZG9zIGxvcyByZXBldGlkb3MgDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBCbHVlOyI+TWVyZ2U8L3NwYW4+DQpMYSBmdW5jacOzbiAqbWVyZ2UqIHNpcnZlIHBhcmEganVudGFyIGJhc2VzIGRlIGRhdG9zLg0KYGBge3J9DQpiZGdyYW5kZSA8LSBtZXJnZShmbGlnaHRzLGFpcmxpbmVzLCBieT0iY2FycmllciIpIA0KYmRncmFuZGUyIDwtIG1lcmdlKGJkZ3JhbmRlLHBsYW5lcywgYnk9InRhaWxudW0iKQ0KYGBgDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogQmx1ZTsiPk11dGF0ZTwvc3Bhbj4NCmBgYHtyfQ0KYmRncmFuZGUzIDwtIG11dGF0ZShiZGdyYW5kZTIsZGlzdF9tdHMgPSBkaXN0YW5jZSoxLjYwOSkgIyBBZ3JlZ2EgdmFyaWFibGVzIG51ZXZhcyBjYWxjdWxhZGFzIGEgcGFydGlyIGRlIHZhcmlhYmxlcyBleGlzdGVudGVzIGVuIGxhIGJhc2UgZGUgZGF0b3MNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IEJsdWU7Ij5FamVyY2ljaW9zPC9zcGFuPg0KMS4gRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIHR1dmllcm9uIHVuIGF0cmFzbyBlbiBsbGVnYWRhIGRlIDIgaG9yYXMgbyBtw6FzIA0KYGBge3J9DQplamVyY2ljaW8xIDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGFycl9kZWxheT49MTIwKQ0KYGBgDQoNCjIuIEVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBsbGVnYXJvbiBhIEhvdXN0b24gKElBSCBvIEhPVSkNCmBgYHtyfQ0KZWplcmNpY2lvMiA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihkZXN0ID09ICJJQUgiIHwgZGVzdCA9PSAiSE9VIikNCmBgYA0KDQozLkVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIG9wZXJhZG9zIHBvciBVbml0ZWQsIEFtZXJpY2FuIG8gRGVsdGENCmBgYHtyfQ0KZWplcmNpY2lvMyA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihjYXJyaWVyICVpbiUgYygiVUEiICwgIkFBIiAsICJETCIpKQ0KYGBgDQoNCkVqZXJjaWNpbyA0LiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgZGVzcGVnYXJvbiBlbiBKdWxpbywgQWdvc3RvIG8gU2VwdGllbWJyZS4NCmBgYHtyfQ0KZWplcmNpY2lvNGEgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIobW9udGggPT0gNyB8IG1vbnRoID09IDggfCBtb250aCA9PSA5KQ0KDQplamVyY2ljaW80YiA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihtb250aCAlaW4lIGMoNzo5KSkNCmBgYA0KDQpFamVyY2ljaW8gNS4gRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIGFycml2YXJvbiBtw6FzIGRlIDIgaG9yYXMgdGFyZGUsIHBlcm8gbm8gZGVzcGVnYXJvbiB0YXJkZS4NCmBgYHtyfQ0KZWplcmNpY2lvNSA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihhcnJfZGVsYXk+MTIwICYgZGVwX2RlbGF5PD0wKQ0KYGBgDQoNCkVqZXJjaWNpbyA2LiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgc2UgcmV0cmFzYXJvbiBhbCBtZW5vcyAxIGhvcmEsIHBlcm8gcXVlIGxsZWdhcm9uIGFudGVzIDMwIG1pbnV0b3MgbyBtw6FzLg0KYGBge3J9DQplamVyY2ljaW82IDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGRlcF9kZWxheT49NjAgJiBhcnJfZGVsYXk8PS0zMCkNCmBgYA0KDQpFamVyY2ljaW8gNy4gRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIHNhbGllcm9uIGVudHJlIGxhIG1lZGlhbm9jaGUgeSBsYXMgNiBhLm0uIA0KYGBge3J9DQplamVyY2ljaW83IDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGRlcF90aW1lID09IDI0MDAgfCBkZXBfdGltZSA8PSA2MDApDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBCbHVlOyI+QXJyYW5nZTwvc3Bhbj4NClNpbWlsYXIgYSBmaWx0ZXIoKSBwZXJvIGVuIGx1Z2FyIGRlIHNlbGVjY2lvbmFyIHJlbmdsb25lcywgbG9zIG9yZGVuYSBkZSBtZW5vciBhIG1heW9yLg0KYGBge3J9DQpkZjExIDwtIGFycmFuZ2UoYmRncmFuZGUyLHllYXIueCxtb250aCxkYXksKQ0KYGBgDQoNCnBhcmEgYWNvbW9kYXIgZGUgbWF5b3IgYSBtZW5vci4gDQpgYGB7cn0NCmRmMTIgPC0gYXJyYW5nZShiZGdyYW5kZTIseWVhci54LGRlc2MobW9udGgpLGRheSkNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IEJsdWU7Ij5TdW1tYXJpemU8L3NwYW4+DQpDb2xhcHNhIHVuYSB0YWJsYSBhIHVuIHPDs2xvIHJlbmdsw7NuIA0KYGBge3J9DQojIE9idMOpbiBlbCByZXRyYXNvIHByb21lZGlvIGRlIGRlc3BlZ3VlIGRlIHRvZG9zIGxvcyB2dWVsb3MgDQpzdW1tYXJpemUoYmRncmFuZGUyLG1lYW4oZGVwX2RlbGF5LCBuYS5ybT1UUlVFKSkNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IEJsdWU7Ij5Hcm91cCBieTwvc3Bhbj4NCkFncnVwYSB0YWJsYSBiYXNhZG8gZW4gYWxndW5hcyBjb2x1bW5hcw0KYGBge3J9DQojIE9idGVuZXIgZWwgcmV0cmFzbyBwcm9tZWRpbyBkZSBkZXNwZWd1ZSBwb3IgZMOtYSANCnBvcl9kaWEgPC0gZ3JvdXBfYnkoYmRncmFuZGUyLCB5ZWFyLngsbW9udGgsZGF5KQ0Kc3VtbWFyaXplKHBvcl9kaWEsbWVhbihkZXBfZGVsYXksIG5hLnJtPVRSVUUpKQ0KYGBgDQoNCg0K