Contexto

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

Este paquete incluye las siguientes tablas:

  • flights = todos los vuelos que salieron de NY en 2013
  • weather = datos meteorlógicos por hora de cada aeropuerto
  • planes = información de construcción de cada avión
  • airports = nombres y ubiaciones de aeropuertos
  • airlines = relación entre nombres y códigos

Fuente:
Origen de 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 base 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 columnas específicas
df2 <- flights %>% select(carrier:distance) #selección de rango de columnas
df3 <- flights %>% select(-carrier, -distance) #eliminar columnas específicas
df4 <- flights %>% select(-carrier:-distance) #eliminar rango de columnas específicas
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).

df7 <- flights %>% filter(dep_delay >=500) #extrae rengloness que cumplan condición
# Condicionales: Igual ==, Desigual =!=, Mayor que >, Mayor o igual que >=, menos que <, menor o igual que <=
# operadores lógicos: AND &, OR |, NOT !
df8 <- flights %>% filter(dep_delay >=500, dep_delay <600) #extrae renglones que cumplan con 2 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 todo los repetidos

Merge

La funcion 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 <- bdgrande2 %>% filter(arr_delay>=120)
  1. Encuentra todos los vuelos que llegaron a Houston
ejercicio2 <- bdgrande2 %>% filter(dest=="IAH" | dest=="HOU")
  1. Encuentra todos los vuelos operados por United, american o Delta
ejercicio3 <- bdgrande2 %>% filter(carrier %in% c("UA", "AA", "DL"))
  1. Encuentra todos los vuelos que despegaron en Julio, Agosto o Septiembre.
ejercicio4 <- bdgrande2 %>% 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 <- bdgrande2 %>% 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 <- bdgrande2 %>% filter(dep_delay>=60 & arr_delay<=-30)
  1. 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(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

Agrupa 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
LS0tDQp0aXRsZTogIkRhdGEgV3JhbmdsaW5nIChQYXJ0ZSAxKSINCmF1dGhvcjogIlNhbHZhZG9yIE5hcnZhZXogLSBBMDA1NzE4NDgiDQpkYXRlOiAiMjAyNC0wMi0xOSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IHlldGkNCi0tLQ0KDQohW10oQzpcXFVzZXJzXFxjaGF2YVxcRG93bmxvYWRzXFx0aWxpbi5wbmcpDQoNCiMgPHNwYW4gc3R5bGUgPSJjb2xvcjogYmx1ZTsiPkNvbnRleHRvPC9zcGFuPg0KRWwgcGFxdWV0ZSAqKm55Y2ZsaWdodHMxMyoqIGNvbnRpZW5lIGluZm9ybWFjacOzbiBzb2JyZSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBwYXJ0aWVyb24gZGVzZGUgTnVldmEgWW9yayAoRVdSLCBKRksgeSBMR0EpIGEgZGVzdGlub3MgZW4gbG9zIEVFLlVVIGVuIDIwMTMuIEZ1ZXJvbiAzMzYsNzc2IHZ1ZWxvcyBlbiB0b3RhbC4gUGFyYSBheXVkYXIgYSBjb21wcmVuZGVyIGxhcyBjYXVzYXMgZGUgbG9zIHJlc3RyYXNvLCB0YW1iacOpbiBpbmNsdXllIG90cm9zIGNvbmp1bnRvcyBkZSBkYXRvcyDDunRpbGVzLiANCg0KRXN0ZSBwYXF1ZXRlIGluY2x1eWUgbGFzIHNpZ3VpZW50ZXMgdGFibGFzOiAgDQoNCiogZmxpZ2h0cyA9IHRvZG9zIGxvcyB2dWVsb3MgcXVlIHNhbGllcm9uIGRlIE5ZIGVuIDIwMTMgIA0KKiB3ZWF0aGVyID0gZGF0b3MgbWV0ZW9ybMOzZ2ljb3MgcG9yIGhvcmEgZGUgY2FkYSBhZXJvcHVlcnRvICANCiogcGxhbmVzID0gaW5mb3JtYWNpw7NuIGRlIGNvbnN0cnVjY2nDs24gZGUgY2FkYSBhdmnDs24gIA0KKiBhaXJwb3J0cyA9IG5vbWJyZXMgeSB1YmlhY2lvbmVzIGRlIGFlcm9wdWVydG9zICANCiogYWlybGluZXMgPSByZWxhY2nDs24gZW50cmUgbm9tYnJlcyB5IGPDs2RpZ29zIA0KDQpGdWVudGU6ICANCltPcmlnZW4gZGUgZGF0b3NdKGh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWNrYWdlcy9ueWNmbGlnaHRzMTMvbnljZmxpZ2h0czEzLnBkZikNCg0KIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+SW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hczwvc3Bhbj4NCmBgYHtyfQ0KI2luc3RhbGwucGFja2FnZXMoIm55Y2ZsaWdodHMxMyIpDQpsaWJyYXJ5KG55Y2ZsaWdodHMxMykNCiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpgYGANCg0KIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+R3VhcmRhciBiYXNlIGRlIGRhdG9zPC9zcGFuPg0KYGBge3J9DQpmbGlnaHRzIDwtIGZsaWdodHMNCndlYXRoZXIgPC0gd2VhdGhlcg0KcGxhbmVzIDwtIHBsYW5lcw0KYWlycG9ydHMgPC0gYWlycG9ydHMNCmFpcmxpbmVzIDwtIGFpcmxpbmVzDQpgYGANCg0KIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBibHVlOyI+UmVsYWNpw7NuIGVudHJlIGxhcyBiYXNlcyBkZSBkYXRvczwvc3Bhbj4NCiFbXShDOlxcVXNlcnNcXGNoYXZhXFxPbmVEcml2ZVxcUGljdHVyZXNcXFNjcmVlbnNob3RzXFxTY3JlZW5zaG90IDIwMjQtMDItMTkgMTIxNzQ0LnBuZykNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5GdW5jaW9uZXMgYsOhc2ljYXMgZGUgTWFuZWpvIGRlIERhdG9zPC9zcGFuPg0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5TZWxlY3Q8L3NwYW4+DQpMYSBmdW5jacOzbiAqc2VsZWN0KiBzaXJ2ZSBwYXJhIHNlbGVjY2lvbmFyIGNvbHVtbmFzIGRlIHVuYSB0YWJsYSAoKmRhdGEgZnJhbWUqKS4NCmBgYHtyfQ0KZGYxIDwtIGZsaWdodHMgJT4lIHNlbGVjdChjYXJyaWVyLCBmbGlnaHQpICNzZWxlY2Npw7NuIGNvbHVtbmFzIGVzcGVjw61maWNhcw0KZGYyIDwtIGZsaWdodHMgJT4lIHNlbGVjdChjYXJyaWVyOmRpc3RhbmNlKSAjc2VsZWNjacOzbiBkZSByYW5nbyBkZSBjb2x1bW5hcw0KZGYzIDwtIGZsaWdodHMgJT4lIHNlbGVjdCgtY2FycmllciwgLWRpc3RhbmNlKSAjZWxpbWluYXIgY29sdW1uYXMgZXNwZWPDrWZpY2FzDQpkZjQgPC0gZmxpZ2h0cyAlPiUgc2VsZWN0KC1jYXJyaWVyOi1kaXN0YW5jZSkgI2VsaW1pbmFyIHJhbmdvIGRlIGNvbHVtbmFzIGVzcGVjw61maWNhcw0KZGY1IDwtIGZsaWdodHMgJT4lIHNlbGVjdCAoYWVyb2xpbmVhID0gY2FycmllcikgI3NlbGVjY2lvbmEgdW5hIGNvbHVtbmEgeSBsZSBjYW1iaWEgZWwgbm9tYnJlDQpkZjYgPC0gZmxpZ2h0cyAlPiUgcmVuYW1lKGFlcm9saW5lYSA9IGNhcnJpZXIpICNjYW1iaWEgZWwgbm9tYnJlIGEgdW5hIGNvbHVtbmENCmBgYA0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+RmlsdGVyPC9zcGFuPg0KTGEgZnVuY2nDs24gKmZpbHRlciogc2lydmUgcGFyYSBzZWxlY2Npb25hciByZW5nbG9uZXMgZGUgdW5hIHRhYmxhICgqZGF0YSBmcmFtZSopLg0KYGBge3J9DQpkZjcgPC0gZmxpZ2h0cyAlPiUgZmlsdGVyKGRlcF9kZWxheSA+PTUwMCkgI2V4dHJhZSByZW5nbG9uZXNzIHF1ZSBjdW1wbGFuIGNvbmRpY2nDs24NCiMgQ29uZGljaW9uYWxlczogSWd1YWwgPT0sIERlc2lndWFsID0hPSwgTWF5b3IgcXVlID4sIE1heW9yIG8gaWd1YWwgcXVlID49LCBtZW5vcyBxdWUgPCwgbWVub3IgbyBpZ3VhbCBxdWUgPD0NCiMgb3BlcmFkb3JlcyBsw7NnaWNvczogQU5EICYsIE9SIHwsIE5PVCAhDQpkZjggPC0gZmxpZ2h0cyAlPiUgZmlsdGVyKGRlcF9kZWxheSA+PTUwMCwgZGVwX2RlbGF5IDw2MDApICNleHRyYWUgcmVuZ2xvbmVzIHF1ZSBjdW1wbGFuIGNvbiAyIGNvbmRpY2lvbmVzDQpkZjkgPC0gZmxpZ2h0cyAlPiUgc2xpY2UoMTAwMDoxMDk5KSAjZXh0cmFlIGxvcyBuw7ptZXJvcyBkZSBsb3MgcmVuZ2xvbmVzIGluZGljYWRvcywgc2luIGltcG9ydGFyIHN1cyB2YWxvcmVzDQpgYGANCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPkRpc3RpbmN0PC9zcGFuPg0KTGEgZnVuY2nDs24gKmRpc3RpbmN0KiBzaXJ2ZSBwYXJhIGVsaW1pbmFyIHJlbmdsb25lcyBkdXBsaWNhZG9zLg0KYGBge3J9DQpkZjEwIDwtIGRpc3RpbmN0KGZsaWdodHMpICNkZWphciBzb2xvIGxvcyByZW5nbG9uZXMgZGlmZXJlbnRlcywgYm9ycmEgdG9kbyBsb3MgcmVwZXRpZG9zDQpgYGANCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPk1lcmdlPC9zcGFuPg0KTGEgZnVuY2lvbiAqbWVyZ2UqIHNpcnZlIHBhcmEganVudGFyIGJhc2VzIGRlIGRhdG9zLg0KYGBge3J9DQpiZGdyYW5kZSA8LSBtZXJnZShmbGlnaHRzLGFpcmxpbmVzLCBieT0iY2FycmllciIpDQpiZGdyYW5kZTIgPC0gbWVyZ2UoYmRncmFuZGUscGxhbmVzLCBieT0idGFpbG51bSIpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+TXV0YXRlPC9zcGFuPg0KYGBge3J9DQpiZGdyYW5kZTMgPC0gbXV0YXRlKGJkZ3JhbmRlMiwgZGlzdF9rbSA9IGRpc3RhbmNlKjEuNjA5KQ0KI2FncmVnYSB2YXJpYWJsZXMgbnVldmFzIGNhbGN1bGFkYXMgYSBwYXJ0aXIgZGUgdmFyaWFibGVzIGV4aXN0ZW50ZXMgZW4gbGEgYmFzZSBkZSBkYXRvcw0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+RWplcmNpY2lvczwvc3Bhbj4NCjEuIEVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSB0dXZpZXJvbiB1biBhdHJhc28gZGUgMiBob3JhcyBvIG3DoXMuDQpgYGB7cn0NCmVqZXJjaWNpbzEgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIoYXJyX2RlbGF5Pj0xMjApDQoNCmBgYA0KDQoNCjIuIEVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBsbGVnYXJvbiBhIEhvdXN0b24NCmBgYHtyfQ0KZWplcmNpY2lvMiA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihkZXN0PT0iSUFIIiB8IGRlc3Q9PSJIT1UiKQ0KDQpgYGANCg0KDQozLiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBvcGVyYWRvcyBwb3IgVW5pdGVkLCBhbWVyaWNhbiBvIERlbHRhDQpgYGB7cn0NCmVqZXJjaWNpbzMgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIoY2FycmllciAlaW4lIGMoIlVBIiwgIkFBIiwgIkRMIikpDQoNCmBgYA0KDQoNCjQuIEVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBkZXNwZWdhcm9uIGVuIEp1bGlvLCBBZ29zdG8gbyBTZXB0aWVtYnJlLg0KYGBge3J9DQplamVyY2ljaW80IDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKG1vbnRoICVpbiUgYygiNyIsICI4IiwgIjkiKSkNCg0KYGBgDQoNCg0KNS4gRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIGFycml2YXJvbiBtw6FzIGRlIDIgaG9yYXMgdGFyZGUsIHBlcm8gbm8gZGVzcGVnYXJvbiB0YXJkZS4NCmBgYHtyfQ0KZWplcmNpY2lvNSA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihhcnJfZGVsYXk+MTIwICYgZGVwX2RlbGF5PD0wKQ0KDQpgYGANCg0KDQo2LiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgc2UgcmV0cmFzYXJvbiBhbCBtZW5vcyAxIGhvcmEsIHBlcm8gcXVlIGxsZWdhcm9uIGFudGVzIDMwIG1pbnV0b3MgbyBtw6FzLg0KYGBge3J9DQplamVyY2ljaW82IDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGRlcF9kZWxheT49NjAgJiBhcnJfZGVsYXk8PS0zMCkNCg0KYGBgDQoNCg0KNy4gRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIHNhbGllcm9uIGVudHJlIGxhIG1lZGlhbm9jaGUgeSBsYXMgNiBhLm0uIA0KYGBge3J9DQplamVyY2ljaW83IDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGRlcF90aW1lPT0yNDAwIHwgZGVwX3RpbWU8PTYwMCkNCg0KYGBgDQoNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5BcnJhbmdlPC9zcGFuPg0KU2ltaWxhciBhIGZpbHRlcigpIHBlcm8gZW4gbHVnYXIgZGUgc2VsZWNjaW9uYXIgcmVuZ2xvbmVzLCBsb3Mgb3JkZW5hIGRlIG1lbm9yIGEgbWF5b3IuDQpgYGB7cn0NCmRmMTEgPC0gYXJyYW5nZShiZGdyYW5kZTMsIHllYXIueCwgbW9udGgsIGRheSkNCg0KYGBgDQoNCg0KUGFyYSBhY29tb2RhciBkZSBtYXlvciBhIG1lbm9yLg0KYGBge3J9DQpkZjEyIDwtIGFycmFuZ2UoYmRncmFuZGUzLCB5ZWFyLngsIGRlc2MobW9udGgpLCBkYXkpDQpgYGANCg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPlN1bW1hcml6ZTwvc3Bhbj4NCkNvbGFwc2EgdW5hIHRhYmxhIGEgdW4gc8OzbG8gcmVuZ2zDs24uDQpgYGB7cn0NCiMgT2J0w6luIGVsIHJldHJhc28gcHJvbWVkaW8gZGUgc2FsaWRhIGRlIHRvZG9zIGxvcyB2dWVsb3MNCnN1bW1hcml6ZShiZGdyYW5kZTMsIG1lYW4oZGVwX2RlbGF5LCBuYS5ybT1UUlVFKSkNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPkdyb3VwIGJ5PC9zcGFuPg0KQWdydXBhIHRhYmxhIGJhc2FkbyBlbiBhbGd1bmFzIGNvbHVtbmFzLg0KYGBge3J9DQojIE9idGVuZXIgZWwgcmV0cmFzbyBwcm9tZWRpbyBkZSBkZXNwZWd1ZSBwb3IgZMOtYQ0KcG9yX2RpYSA8LSBncm91cF9ieShiZGdyYW5kZTMsIHllYXIueCwgbW9udGgsIGRheSkNCnN1bW1hcml6ZShwb3JfZGlhLG1lYW4oZGVwX2RlbGF5LCBuYS5ybT1UUlVFKSkNCmBgYA0KDQoNCg0KDQo=