Contexto

El paquete nycflights13 contiene infromación sobre todos los vuelos que partieron desde Nueva York (EWR, JFK y LGA) a destinos en los Estados Unidos. Fueron 336,776 vuelos en total. Para ayudar a comporender las causas de los restrasos, tambien 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 metereológicos por hora de cada aeropuerto
  • planes = información de contruccion 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 datos

Instalar Paquetes y llamar librerias

# 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 las 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) #seleccionar unas columnas en especifico
df2 <- flights %>% select(carrier:distance) #seleccionar de una columan a una columna
df3 <- flights %>% select(-carrier, -flight) #seleccionar todo menos esas columnas 
df4 <- flights %>% select(-carrier:-distance) #todas las columnas menos las que estan entre carrier y distance incluyendo estas 2
df5 <- flights %>% select(aerolinea = carrier) #nombrar una variable o cambiar el idioma
df6 <- flights %>% rename(aerolinea = carrier ) #ponerle nombre a una variable 

Select

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

df7 <- flights %>% filter(dep_delay >=500) #seleccionar renglones que sean mayor o igual a una cantidad (que cumplan la condicion)
# Condiciones: Igual ==, Desigual =!=, Mayor que >, Mayor o igual que >=, Mneor que <, Menor o igual que <=
# Operadores logisticos: AND &, OR |, NOT ! 
df8 <- flights %>% filter(dep_delay >= 500, dep_delay <600) #seleccionar renglones que esten entre una cantidad de datos 
df9 <- flights %>% slice(1000:1099) #seleccionar solo renglones en ese rango (un recorte de tabla en esos renglones)

Distinct

La función distinct sirve para eliminar renglones duplicados.

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

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 varibles axistentes en la base de datos

##Ejercicios 1. Encuentra todos los vuelos que tuvieron un atraso de 2 hrs 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. Ejercicio 4. Encuentra todos los vuelos que despegaron en Julio, Agosto o Septiembre.
ejercicio4 <- bdgrande2 %>% filter( month == 7 | month == 8 | month == 9)

ejercicio4a <- 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_time == sched_dep_time)

ejercicio5b  <- 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 solo renglón.

# Obten el retraso promedio de despegue de toos los vuelos 
summarize(bdgrande2, mean(dep_delay, na.rm=TRUE))
##   mean(dep_delay, na.rm = TRUE)
## 1                      13.17979

Group by

Agrupa tabla basada en algunas columnas.

#Obtener el rertraso promedio de despegue por dia
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
LS0tCnRpdGxlOiAiRGF0YSB3cmFuZ2xpbmcgKFBhcnRlIDEpIgphdXRob3I6ICJKb3JnZSBQb25zIEEwMTQyNDEwOCIKZGF0ZTogIjIwMjQtMDItMTkiCm91dHB1dDoKIGh0bWxfZG9jdW1lbnQ6IAogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiB5ZXRpCi0tLQoKIVtdKC9Vc2Vycy9qb3Jwb25zL0Rlc2t0b3AvcG5nLXRyYW5zcGFyZW50LWFpcnBsYW5lLWZsaWdodC1maXhlZC13aW5nLWFpcmNyYWZ0LWFpcmxpbmVyLWFpcnBsYW5lLXBob3RvZ3JhcGh5LW1vZGUtb2YtdHJhbnNwb3J0LWFpcnBsYW5lLXRodW1ibmFpbC5wbmcpCgojIDxzcGFuIHN0eWxlPSAiY29sb3I6IFJlZDsiPkNvbnRleHRvPC9zcGFuPgpFbCBwYXF1ZXRlICoqbnljZmxpZ2h0czEzKiogY29udGllbmUgaW5mcm9tYWNpw7NuIHNvYnJlIHRvZG9zIGxvcyB2dWVsb3MgcXVlIHBhcnRpZXJvbiBkZXNkZSBOdWV2YSBZb3JrIChFV1IsIEpGSyB5IExHQSkgYSBkZXN0aW5vcyBlbiBsb3MgRXN0YWRvcyBVbmlkb3MuIEZ1ZXJvbiAzMzYsNzc2IHZ1ZWxvcyBlbiB0b3RhbC4gUGFyYSBheXVkYXIgYSBjb21wb3JlbmRlciBsYXMgY2F1c2FzIGRlIGxvcyByZXN0cmFzb3MsIHRhbWJpZW4gaW5jbHV5ZSBvdHJvcyBjb25qdW50b3MgZGUgZGF0b3Mgw7p0aWxlcy4gIAoKRXN0ZSBwYXF1ZXRlIGluY2x1eWUgbGFzIHNpZ3VpZW50ZXMgdGFibGFzOiAgCgorIGZsaWdodHMgPSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBzYWxpZXJvbiBkZSBOdWV2YSBZb3JrIGVuIDIwMTMqICAKKyB3ZWF0aGVyID0gZGF0b3MgbWV0ZXJlb2zDs2dpY29zIHBvciBob3JhIGRlIGNhZGEgYWVyb3B1ZXJ0byAgCisgcGxhbmVzID0gaW5mb3JtYWNpw7NuIGRlIGNvbnRydWNjaW9uIGRlIGNhZGEgYXZpw7NuLiAgCisgYWlycG9ydHMgPSBub21icmVzIHkgdWJpY2FjaW9uZXMgZGUgYWVyb3B1ZXJ0b3MuICAKKyBhaXJsaW5lcyA9IHJlbGFjacOzbiBlbnRyZSBub21icmVzIHkgY8OzZGlnb3MgZGUgbGFzIGFlcm9sw61uZWFzCgpmdWVudGU6IApbT3JpZ2VuIGRlIGRhdG9zXShodHRwczovL2NyYW4uci1wcm9qZWN0Lm9yZy93ZWIvcGFja2FnZXMvbnljZmxpZ2h0czEzL255Y2ZsaWdodHMxMy5wZGYpCgojIDxzcGFuIHN0eWxlPSAiY29sb3I6IG9yYW5nZTsiPkluc3RhbGFyIFBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcmlhczwvc3Bhbj4KYGBge3J9CiMgaW5zdGFsbC5wYWNrYWdlcygibnljZmxpZ2h0czEzIikKbGlicmFyeShueWNmbGlnaHRzMTMpCiMgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikKbGlicmFyeSh0aWR5dmVyc2UpCmBgYAoKCiMgPHNwYW4gc3R5bGU9ICJjb2xvcjogR3JlZW47Ij5HdWFyZGFyIGxhcyBiYXNlcyBkZSBkYXRvczwvc3Bhbj4KYGBge3J9CmZsaWdodHMgPC0gZmxpZ2h0cwp3ZWF0aGVyIDwtIHdlYXRoZXIKcGxhbmVzIDwtIHBsYW5lcwphaXJwb3J0cyA8LSBhaXJwb3J0cwphaXJsaW5lcyA8LSBhaXJsaW5lcyAKYGBgCgojIDxzcGFuIHN0eWxlPSAiY29sb3I6IHBpbms7Ij5SZWxhY2nDs24gZW50cmUgbGFzIGJhc2VzIGRlIGRhdG9zIDwvc3Bhbj4KIVtdKC9Vc2Vycy9qb3Jwb25zL0Rlc2t0b3AvcmVsYXRpb25hbC1ueWNmbGlnaHRzLnBuZykKCiMgPHNwYW4gc3R5bGU9ICJjb2xvcjogQmx1ZTsiPkZ1bmNpb25lcyBCw6FzaWNhcyBkZSBNYW5lam8gZGUgRGF0b3MgPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogQmx1ZTsiPlNlbGVjdCA8L3NwYW4+CkxhIGZ1bmNpw7NuICpzZWxlY3QqIHNpcnZlIHBhcmEgc2VsZWNjaW9uYXIgY29sdW1uYXMgZGUgdW5hIHRhYmxhICgqZGF0YSBmcmFtZSopLgpgYGB7cn0KZGYxIDwtIGZsaWdodHMgJT4lIHNlbGVjdChjYXJyaWVyLCBmbGlnaHQpICNzZWxlY2Npb25hciB1bmFzIGNvbHVtbmFzIGVuIGVzcGVjaWZpY28KZGYyIDwtIGZsaWdodHMgJT4lIHNlbGVjdChjYXJyaWVyOmRpc3RhbmNlKSAjc2VsZWNjaW9uYXIgZGUgdW5hIGNvbHVtYW4gYSB1bmEgY29sdW1uYQpkZjMgPC0gZmxpZ2h0cyAlPiUgc2VsZWN0KC1jYXJyaWVyLCAtZmxpZ2h0KSAjc2VsZWNjaW9uYXIgdG9kbyBtZW5vcyBlc2FzIGNvbHVtbmFzIApkZjQgPC0gZmxpZ2h0cyAlPiUgc2VsZWN0KC1jYXJyaWVyOi1kaXN0YW5jZSkgI3RvZGFzIGxhcyBjb2x1bW5hcyBtZW5vcyBsYXMgcXVlIGVzdGFuIGVudHJlIGNhcnJpZXIgeSBkaXN0YW5jZSBpbmNsdXllbmRvIGVzdGFzIDIKZGY1IDwtIGZsaWdodHMgJT4lIHNlbGVjdChhZXJvbGluZWEgPSBjYXJyaWVyKSAjbm9tYnJhciB1bmEgdmFyaWFibGUgbyBjYW1iaWFyIGVsIGlkaW9tYQpkZjYgPC0gZmxpZ2h0cyAlPiUgcmVuYW1lKGFlcm9saW5lYSA9IGNhcnJpZXIgKSAjcG9uZXJsZSBub21icmUgYSB1bmEgdmFyaWFibGUgCmBgYAoKIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogQmx1ZTsiPlNlbGVjdCA8L3NwYW4+CkxhIGZ1bmNpw7NuICpmaWx0ZXIqIHNpcnZlIHBhcmEgc2VsZWNjaW9uYXIgcmVuZ2xvbnJlcyBkZSB1bmEgdGFibGEgKCpkYXRhIGZyYW1lKikKYGBge3J9CmRmNyA8LSBmbGlnaHRzICU+JSBmaWx0ZXIoZGVwX2RlbGF5ID49NTAwKSAjc2VsZWNjaW9uYXIgcmVuZ2xvbmVzIHF1ZSBzZWFuIG1heW9yIG8gaWd1YWwgYSB1bmEgY2FudGlkYWQgKHF1ZSBjdW1wbGFuIGxhIGNvbmRpY2lvbikKIyBDb25kaWNpb25lczogSWd1YWwgPT0sIERlc2lndWFsID0hPSwgTWF5b3IgcXVlID4sIE1heW9yIG8gaWd1YWwgcXVlID49LCBNbmVvciBxdWUgPCwgTWVub3IgbyBpZ3VhbCBxdWUgPD0KIyBPcGVyYWRvcmVzIGxvZ2lzdGljb3M6IEFORCAmLCBPUiB8LCBOT1QgISAKZGY4IDwtIGZsaWdodHMgJT4lIGZpbHRlcihkZXBfZGVsYXkgPj0gNTAwLCBkZXBfZGVsYXkgPDYwMCkgI3NlbGVjY2lvbmFyIHJlbmdsb25lcyBxdWUgZXN0ZW4gZW50cmUgdW5hIGNhbnRpZGFkIGRlIGRhdG9zIApkZjkgPC0gZmxpZ2h0cyAlPiUgc2xpY2UoMTAwMDoxMDk5KSAjc2VsZWNjaW9uYXIgc29sbyByZW5nbG9uZXMgZW4gZXNlIHJhbmdvICh1biByZWNvcnRlIGRlIHRhYmxhIGVuIGVzb3MgcmVuZ2xvbmVzKQpgYGAKIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogQmx1ZTsiPkRpc3RpbmN0IDwvc3Bhbj4KTGEgZnVuY2nDs24gKmRpc3RpbmN0KiBzaXJ2ZSBwYXJhIGVsaW1pbmFyIHJlbmdsb25lcyBkdXBsaWNhZG9zLgpgYGB7cn0KZGYxMCA8LSBkaXN0aW5jdChmbGlnaHRzKSAjRGVqYXIgc29sbyBsb3MgcmVuZ2xvbmVzIGRpZmVyZW50ZXMsIGJvcnJhIHRvZG9zIGxvcyByZXBlcnRpZG9zIApgYGAKIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogQmx1ZTsiPk1lcmdlIDwvc3Bhbj4KTGEgZnVuY2nDs24gKm1lcmdlKiBzaXJ2ZSBwYXJhIGp1bnRhciBiYXNlcyBkZSBkYXRvcwpgYGB7cn0KYmRncmFuZGUgPC0gbWVyZ2UoZmxpZ2h0cyxhaXJsaW5lcywgYnk9ImNhcnJpZXIiKQpiZGdyYW5kZTIgPC0gbWVyZ2UoYmRncmFuZGUscGxhbmVzLCBieT0idGFpbG51bSIpCmBgYAojIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBCbHVlOyI+IE11dGF0ZSA8L3NwYW4+CmBgYHtyfQpiZGdyYW5kZTMgPC0gbXV0YXRlKGJkZ3JhbmRlMiwgZGlzdF9tdHMgPSBkaXN0YW5jZSoxLjYwOSkgIyBBZ3JlZ2EgdmFyaWFibGVzIG51ZXZhcyBjYWxjdWxhZGFzIGEgcGFydGlyIGRlIHZhcmlibGVzIGF4aXN0ZW50ZXMgZW4gbGEgYmFzZSBkZSBkYXRvcwpgYGAKCiMjRWplcmNpY2lvcwoxLiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgdHV2aWVyb24gdW4gYXRyYXNvIGRlIDIgaHJzIG8gbcOhcy4KYGBge3J9CmVqZXJjaWNpbzEgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIoYXJyX2RlbGF5Pj0xMjApCmBgYAoKMi4gRW5jdWVudHJhIHRvZG9zIGxvcyB2dWVsb3MgcXVlIGxsZWdhcm9uIGEgSG91c3RvbiAKYGBge3J9CmVqZXJjaWNpbzIgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIoZGVzdCA9PSJJQUgiIHwgZGVzdCA9PSAiSE9VIikKYGBgCjMuIEVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIG9wZXJhZG9zIHBvciBVbml0ZWQsIEFtZXJpY2FuIG8gRGVsdGEKYGBge3J9CmVqZXJjaWNpbzMgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIoY2FycmllciAlaW4lIGMoIlVBIiwiQUEiLCAiREwiKSkKYGBgCjQuIEVqZXJjaWNpbyA0LiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgZGVzcGVnYXJvbiBlbiBKdWxpbywgQWdvc3RvIG8gU2VwdGllbWJyZS4KYGBge3J9CmVqZXJjaWNpbzQgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIoIG1vbnRoID09IDcgfCBtb250aCA9PSA4IHwgbW9udGggPT0gOSkKCmVqZXJjaWNpbzRhIDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyIChtb250aCAlaW4lIGMoNzo5KSkKYGBgCkVqZXJjaWNpbyA1LiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgYXJyaXZhcm9uIG3DoXMgZGUgMiBob3JhcyB0YXJkZSwgcGVybyBubyBkZXNwZWdhcm9uIHRhcmRlLgpgYGB7cn0KZWplcmNpY2lvNSA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihhcnJfZGVsYXk+IDEyMCAmIGRlcF90aW1lID09IHNjaGVkX2RlcF90aW1lKQoKZWplcmNpY2lvNWIgIDwtIGJkZ3JhbmRlMiAlPiUgZmlsdGVyKGFycl9kZWxheT4gMTIwICYgZGVwX2RlbGF5IDw9MCkKYGBgCkVqZXJjaWNpbyA2LiBFbmN1ZW50cmEgdG9kb3MgbG9zIHZ1ZWxvcyBxdWUgc2UgcmV0cmFzYXJvbiBhbCBtZW5vcyAxIGhvcmEsIHBlcm8gcXVlIGxsZWdhcm9uIGFudGVzIDMwIG1pbnV0b3MgbyBtw6FzLgpgYGB7cn0KZWplcmNpY2lvNiA8LSBiZGdyYW5kZTIgJT4lIGZpbHRlcihkZXBfZGVsYXkgPj02MCAmIGFycl9kZWxheTw9LTMwKQpgYGAKRWplcmNpY2lvIDcuIEVuY3VlbnRyYSB0b2RvcyBsb3MgdnVlbG9zIHF1ZSBzYWxpZXJvbiBlbnRyZSBsYSBtZWRpYW5vY2hlIHkgbGFzIDYgYS5tLiAKYGBge3J9CmVqZXJjaWNpbzcgPC0gYmRncmFuZGUyICU+JSBmaWx0ZXIoZGVwX3RpbWU9PTI0MDAgfCBkZXBfdGltZTw9NjAwKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IEJsdWU7Ij5BcnJhbmdlIDwvc3Bhbj4KU2ltaWxhciBhIGZpbHRlcigpIHBlcm8gZW4gbHVnYXIgZGUgc2VsZWNjaW9uYXIgcmVuZ2xvbmVzLCBsb3Mgb3JkZW5hIGRlIG1lbm9yIGEgbWF5b3IuCmBgYHtyfQpkZjExIDwtIGFycmFuZ2UoYmRncmFuZGUyLHllYXIueCxtb250aCxkYXkpCmBgYApQYXJhIGFjb21vZGFyIGRlIG1heW9yIGEgbWVub3IKYGBge3J9CmRmMTIgPC0gYXJyYW5nZShiZGdyYW5kZTIseWVhci54LGRlc2MobW9udGgpLGRheSkKYGBgCgojIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBCbHVlOyI+U3VtbWFyaXplIDwvc3Bhbj4KQ29sYXBzYSB1bmEgdGFibGEgYSB1biBzb2xvIHJlbmdsw7NuLgpgYGB7cn0KIyBPYnRlbiBlbCByZXRyYXNvIHByb21lZGlvIGRlIGRlc3BlZ3VlIGRlIHRvb3MgbG9zIHZ1ZWxvcyAKc3VtbWFyaXplKGJkZ3JhbmRlMiwgbWVhbihkZXBfZGVsYXksIG5hLnJtPVRSVUUpKQpgYGAKIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogQmx1ZTsiPkdyb3VwIGJ5IDwvc3Bhbj4KQWdydXBhIHRhYmxhIGJhc2FkYSBlbiBhbGd1bmFzIGNvbHVtbmFzLgpgYGB7cn0KI09idGVuZXIgZWwgcmVydHJhc28gcHJvbWVkaW8gZGUgZGVzcGVndWUgcG9yIGRpYQpwb3JfZGlhIDwtIGdyb3VwX2J5KGJkZ3JhbmRlMiwgeWVhci54LG1vbnRoLGRheSkKc3VtbWFyaXplKHBvcl9kaWEsIG1lYW4oZGVwX2RlbGF5LCBuYS5ybT1UUlVFKSkKYGBgCgo=