AE Funciones

library(nycflights13)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
## ✔ tibble  3.1.8     ✔ dplyr   1.1.0
## ✔ tidyr   1.2.1     ✔ stringr 1.4.1
## ✔ readr   2.1.2     ✔ forcats 0.5.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(dplyr)

data(flights)

Seleccionar campos de un data frame con select()

#1 Seleccionar del data frame flights los campos carrier, número de vuelo (flight), origen, destino, tiempo de vuelo y distancia recorrida
select(flights, carrier, flight, origin, dest, air_time, distance)
## # A tibble: 336,776 × 6
##    carrier flight origin dest  air_time distance
##    <chr>    <int> <chr>  <chr>    <dbl>    <dbl>
##  1 UA        1545 EWR    IAH        227     1400
##  2 UA        1714 LGA    IAH        227     1416
##  3 AA        1141 JFK    MIA        160     1089
##  4 B6         725 JFK    BQN        183     1576
##  5 DL         461 LGA    ATL        116      762
##  6 UA        1696 EWR    ORD        150      719
##  7 B6         507 EWR    FLL        158     1065
##  8 EV        5708 LGA    IAD         53      229
##  9 B6          79 JFK    MCO        140      944
## 10 AA         301 LGA    ORD        138      733
## # … with 336,766 more rows
#2 Selecciona del data frame flights todos los campos entre year y day (incluyéndolo)
select(flights, year:day)
## # A tibble: 336,776 × 3
##     year month   day
##    <int> <int> <int>
##  1  2013     1     1
##  2  2013     1     1
##  3  2013     1     1
##  4  2013     1     1
##  5  2013     1     1
##  6  2013     1     1
##  7  2013     1     1
##  8  2013     1     1
##  9  2013     1     1
## 10  2013     1     1
## # … with 336,766 more rows
#3 Seleccionar del data frame flights todos los campos con exepción de hour, minute y time_hour
select(flights, -(hour:time_hour))
## # A tibble: 336,776 × 16
##     year month   day dep_time sched_de…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##    <int> <int> <int>    <int>      <int>   <dbl>   <int>   <int>   <dbl> <chr>  
##  1  2013     1     1      517        515       2     830     819      11 UA     
##  2  2013     1     1      533        529       4     850     830      20 UA     
##  3  2013     1     1      542        540       2     923     850      33 AA     
##  4  2013     1     1      544        545      -1    1004    1022     -18 B6     
##  5  2013     1     1      554        600      -6     812     837     -25 DL     
##  6  2013     1     1      554        558      -4     740     728      12 UA     
##  7  2013     1     1      555        600      -5     913     854      19 B6     
##  8  2013     1     1      557        600      -3     709     723     -14 EV     
##  9  2013     1     1      557        600      -3     838     846      -8 B6     
## 10  2013     1     1      558        600      -2     753     745       8 AA     
## # … with 336,766 more rows, 6 more variables: flight <int>, tailnum <chr>,
## #   origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, and abbreviated
## #   variable names ¹​sched_dep_time, ²​dep_delay, ³​arr_time, ⁴​sched_arr_time,
## #   ⁵​arr_delay
#4 Seleccionar del data frame flights todos los campos que inicien con "dep"
select(flights, starts_with("dep"))
## # A tibble: 336,776 × 2
##    dep_time dep_delay
##       <int>     <dbl>
##  1      517         2
##  2      533         4
##  3      542         2
##  4      544        -1
##  5      554        -6
##  6      554        -4
##  7      555        -5
##  8      557        -3
##  9      557        -3
## 10      558        -2
## # … with 336,766 more rows
#5 Seleccionar del data frame flights todos los campos que terminen con "delay"
select(flights, ends_with("delay"))
## # A tibble: 336,776 × 2
##    dep_delay arr_delay
##        <dbl>     <dbl>
##  1         2        11
##  2         4        20
##  3         2        33
##  4        -1       -18
##  5        -6       -25
##  6        -4        12
##  7        -5        19
##  8        -3       -14
##  9        -3        -8
## 10        -2         8
## # … with 336,766 more rows
#6 Seleccionar del data frame flights todos los campos que contengan "time"
select(flights, contains("time"))
## # A tibble: 336,776 × 6
##    dep_time sched_dep_time arr_time sched_arr_time air_time time_hour          
##       <int>          <int>    <int>          <int>    <dbl> <dttm>             
##  1      517            515      830            819      227 2013-01-01 05:00:00
##  2      533            529      850            830      227 2013-01-01 05:00:00
##  3      542            540      923            850      160 2013-01-01 05:00:00
##  4      544            545     1004           1022      183 2013-01-01 05:00:00
##  5      554            600      812            837      116 2013-01-01 06:00:00
##  6      554            558      740            728      150 2013-01-01 05:00:00
##  7      555            600      913            854      158 2013-01-01 06:00:00
##  8      557            600      709            723       53 2013-01-01 06:00:00
##  9      557            600      838            846      140 2013-01-01 06:00:00
## 10      558            600      753            745      138 2013-01-01 06:00:00
## # … with 336,766 more rows

Agregar nuevos campos a un data frame con mutate()

#7 Seleccionar del data frame flights los campos de year a day, los que terminen con delay y los campos distances y air_time
muta <- select(flights, year:day, ends_with("delay"), distance, air_time)
  #agrega dos campos al data frame anterior
  #1) tiempo_ganado que resulta de restar la hora de llegada a la hora de partida
  #2) velocidad_vuelo que resulta de dividir distancia entre tiempo de vuelo por 60
mutate2 <- mutate(muta, tiempo_ganado = arr_delay - dep_delay, velocidad_vuelo = distance/air_time*60)
mutate2
## # A tibble: 336,776 × 9
##     year month   day dep_delay arr_delay distance air_time tiempo_ganado veloc…¹
##    <int> <int> <int>     <dbl>     <dbl>    <dbl>    <dbl>         <dbl>   <dbl>
##  1  2013     1     1         2        11     1400      227             9    370.
##  2  2013     1     1         4        20     1416      227            16    374.
##  3  2013     1     1         2        33     1089      160            31    408.
##  4  2013     1     1        -1       -18     1576      183           -17    517.
##  5  2013     1     1        -6       -25      762      116           -19    394.
##  6  2013     1     1        -4        12      719      150            16    288.
##  7  2013     1     1        -5        19     1065      158            24    404.
##  8  2013     1     1        -3       -14      229       53           -11    259.
##  9  2013     1     1        -3        -8      944      140            -5    405.
## 10  2013     1     1        -2         8      733      138            10    319.
## # … with 336,766 more rows, and abbreviated variable name ¹​velocidad_vuelo
#8 Muestra únicamente los nuevos campos calculados con transmute()
transmute(mutate2)
## # A tibble: 336,776 × 0

Filtrando datos en un data frame con filter()

#9 Muestra los vuelos que presentan un retraso superior a 2 horas a la hora de llegada
filter(flights, arr_delay > 120)
## # A tibble: 10,034 × 19
##     year month   day dep_time sched_de…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##    <int> <int> <int>    <int>      <int>   <dbl>   <int>   <int>   <dbl> <chr>  
##  1  2013     1     1      811        630     101    1047     830     137 MQ     
##  2  2013     1     1      848       1835     853    1001    1950     851 MQ     
##  3  2013     1     1      957        733     144    1056     853     123 UA     
##  4  2013     1     1     1114        900     134    1447    1222     145 UA     
##  5  2013     1     1     1505       1310     115    1638    1431     127 EV     
##  6  2013     1     1     1525       1340     105    1831    1626     125 B6     
##  7  2013     1     1     1549       1445      64    1912    1656     136 EV     
##  8  2013     1     1     1558       1359     119    1718    1515     123 EV     
##  9  2013     1     1     1732       1630      62    2028    1825     123 EV     
## 10  2013     1     1     1803       1620     103    2008    1750     138 MQ     
## # … with 10,024 more rows, 9 more variables: flight <int>, tailnum <chr>,
## #   origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
## #   minute <dbl>, time_hour <dttm>, and abbreviated variable names
## #   ¹​sched_dep_time, ²​dep_delay, ³​arr_time, ⁴​sched_arr_time, ⁵​arr_delay
#10 Muestra los vuelos que presentan un retraso superior a 2 horas en la hora de llegada o en la hora de partida
filter(flights, arr_delay>120 | dep_delay>120)
## # A tibble: 11,422 × 19
##     year month   day dep_time sched_de…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##    <int> <int> <int>    <int>      <int>   <dbl>   <int>   <int>   <dbl> <chr>  
##  1  2013     1     1      811        630     101    1047     830     137 MQ     
##  2  2013     1     1      848       1835     853    1001    1950     851 MQ     
##  3  2013     1     1      957        733     144    1056     853     123 UA     
##  4  2013     1     1     1114        900     134    1447    1222     145 UA     
##  5  2013     1     1     1505       1310     115    1638    1431     127 EV     
##  6  2013     1     1     1525       1340     105    1831    1626     125 B6     
##  7  2013     1     1     1540       1338     122    2020    1825     115 B6     
##  8  2013     1     1     1549       1445      64    1912    1656     136 EV     
##  9  2013     1     1     1558       1359     119    1718    1515     123 EV     
## 10  2013     1     1     1732       1630      62    2028    1825     123 EV     
## # … with 11,412 more rows, 9 more variables: flight <int>, tailnum <chr>,
## #   origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
## #   minute <dbl>, time_hour <dttm>, and abbreviated variable names
## #   ¹​sched_dep_time, ²​dep_delay, ³​arr_time, ⁴​sched_arr_time, ⁵​arr_delay
#11 Ahora, muestra los vuelos que NO presentan un retraso superior a 2 horas en la hora de llegada o en la hora de partida
filter(flights, !(arr_delay>120 | dep_delay>120))
## # A tibble: 316,050 × 19
##     year month   day dep_time sched_de…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##    <int> <int> <int>    <int>      <int>   <dbl>   <int>   <int>   <dbl> <chr>  
##  1  2013     1     1      517        515       2     830     819      11 UA     
##  2  2013     1     1      533        529       4     850     830      20 UA     
##  3  2013     1     1      542        540       2     923     850      33 AA     
##  4  2013     1     1      544        545      -1    1004    1022     -18 B6     
##  5  2013     1     1      554        600      -6     812     837     -25 DL     
##  6  2013     1     1      554        558      -4     740     728      12 UA     
##  7  2013     1     1      555        600      -5     913     854      19 B6     
##  8  2013     1     1      557        600      -3     709     723     -14 EV     
##  9  2013     1     1      557        600      -3     838     846      -8 B6     
## 10  2013     1     1      558        600      -2     753     745       8 AA     
## # … with 316,040 more rows, 9 more variables: flight <int>, tailnum <chr>,
## #   origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
## #   minute <dbl>, time_hour <dttm>, and abbreviated variable names
## #   ¹​sched_dep_time, ²​dep_delay, ³​arr_time, ⁴​sched_arr_time, ⁵​arr_delay
#12 Muestra los vuelos realizados en los meses de Noviembre y Diciembre
filter(flights, month == 11 | month ==12)
## # A tibble: 55,403 × 19
##     year month   day dep_time sched_de…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##    <int> <int> <int>    <int>      <int>   <dbl>   <int>   <int>   <dbl> <chr>  
##  1  2013    11     1        5       2359       6     352     345       7 B6     
##  2  2013    11     1       35       2250     105     123    2356      87 B6     
##  3  2013    11     1      455        500      -5     641     651     -10 US     
##  4  2013    11     1      539        545      -6     856     827      29 UA     
##  5  2013    11     1      542        545      -3     831     855     -24 AA     
##  6  2013    11     1      549        600     -11     912     923     -11 UA     
##  7  2013    11     1      550        600     -10     705     659       6 US     
##  8  2013    11     1      554        600      -6     659     701      -2 US     
##  9  2013    11     1      554        600      -6     826     827      -1 DL     
## 10  2013    11     1      554        600      -6     749     751      -2 DL     
## # … with 55,393 more rows, 9 more variables: flight <int>, tailnum <chr>,
## #   origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
## #   minute <dbl>, time_hour <dttm>, and abbreviated variable names
## #   ¹​sched_dep_time, ²​dep_delay, ³​arr_time, ⁴​sched_arr_time, ⁵​arr_delay
#13 Muestra los vuelos operados por United, American o Delta
filter(flights, carrier %in% c("UA","AA","DL"))
## # A tibble: 139,504 × 19
##     year month   day dep_time sched_de…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##    <int> <int> <int>    <int>      <int>   <dbl>   <int>   <int>   <dbl> <chr>  
##  1  2013     1     1      517        515       2     830     819      11 UA     
##  2  2013     1     1      533        529       4     850     830      20 UA     
##  3  2013     1     1      542        540       2     923     850      33 AA     
##  4  2013     1     1      554        600      -6     812     837     -25 DL     
##  5  2013     1     1      554        558      -4     740     728      12 UA     
##  6  2013     1     1      558        600      -2     753     745       8 AA     
##  7  2013     1     1      558        600      -2     924     917       7 UA     
##  8  2013     1     1      558        600      -2     923     937     -14 UA     
##  9  2013     1     1      559        600      -1     941     910      31 AA     
## 10  2013     1     1      559        600      -1     854     902      -8 UA     
## # … with 139,494 more rows, 9 more variables: flight <int>, tailnum <chr>,
## #   origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
## #   minute <dbl>, time_hour <dttm>, and abbreviated variable names
## #   ¹​sched_dep_time, ²​dep_delay, ³​arr_time, ⁴​sched_arr_time, ⁵​arr_delay
#14 arrange()funciona de manera similar a filter() excepto que en lugar de seleccionar filas, cambia su orden.
#Ordena flights para encontrar los vuelos más retrasados, el campo arr_delay indica el retraso a la llegada, ordena en forma descendente.
#utiliza pipe para que veas como facilita la estructura de la consulta
arrange(flights, desc(arr_delay))
## # A tibble: 336,776 × 19
##     year month   day dep_time sched_de…¹ dep_d…² arr_t…³ sched…⁴ arr_d…⁵ carrier
##    <int> <int> <int>    <int>      <int>   <dbl>   <int>   <int>   <dbl> <chr>  
##  1  2013     1     9      641        900    1301    1242    1530    1272 HA     
##  2  2013     6    15     1432       1935    1137    1607    2120    1127 MQ     
##  3  2013     1    10     1121       1635    1126    1239    1810    1109 MQ     
##  4  2013     9    20     1139       1845    1014    1457    2210    1007 AA     
##  5  2013     7    22      845       1600    1005    1044    1815     989 MQ     
##  6  2013     4    10     1100       1900     960    1342    2211     931 DL     
##  7  2013     3    17     2321        810     911     135    1020     915 DL     
##  8  2013     7    22     2257        759     898     121    1026     895 DL     
##  9  2013    12     5      756       1700     896    1058    2020     878 AA     
## 10  2013     5     3     1133       2055     878    1250    2215     875 MQ     
## # … with 336,766 more rows, 9 more variables: flight <int>, tailnum <chr>,
## #   origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
## #   minute <dbl>, time_hour <dttm>, and abbreviated variable names
## #   ¹​sched_dep_time, ²​dep_delay, ³​arr_time, ⁴​sched_arr_time, ⁵​arr_delay
#15 Ordena flights para encontrar los vuelos más rápidos (velocidad más alta).
#Muestra los campos carrier, distance y air_time
#Recordando que podemos calcular la velocidad de vuelo con mutate, velocidad_vuelo = distance / air_time * 60
#ordena de forma descendente por velocidad_vuelo
#¿Cuál es la aerolínea que vuela más rápido?
muta2 <- select(flights, year:day, carrier, ends_with("delay"), distance, air_time)
mutate3 <- mutate(muta2, tiempo_ganado = arr_delay - dep_delay, velocidad_vuelo = distance/air_time*60)
arrange(mutate3, desc(velocidad_vuelo))
## # A tibble: 336,776 × 10
##     year month   day carrier dep_delay arr_delay dista…¹ air_t…² tiemp…³ veloc…⁴
##    <int> <int> <int> <chr>       <dbl>     <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
##  1  2013     5    25 DL              9       -14     762      65     -23    703.
##  2  2013     7     2 EV             45        26    1008      93     -19    650.
##  3  2013     5    13 EV             15        -1     594      55     -16    648 
##  4  2013     3    23 EV              4         2     748      70      -2    641.
##  5  2013     1    12 DL             -1       -28    1035     105     -27    591.
##  6  2013    11    17 DL             -5       -51    1598     170     -46    564 
##  7  2013     2    21 B6             -3       -26    1598     172     -23    557.
##  8  2013    11    17 AA             -1       -43    1623     175     -42    556.
##  9  2013    11    16 DL             38       -19    1598     173     -57    554.
## 10  2013    11    16 B6            -10       -38    1598     173     -28    554.
## # … with 336,766 more rows, and abbreviated variable names ¹​distance,
## #   ²​air_time, ³​tiempo_ganado, ⁴​velocidad_vuelo
#La aerolínea que vuela más rápido es Delta (DL)

Aplicando funciones como min, max, mean, sum, count, etc con group_by() y summarize()

#16 Cuál es la media del retraso en los vuelos, agrupa por year, month, day
#Elimina los Na's
#Identifica el día, mes, año que tuvo menos retraso.
group <- group_by(flights, year, month, day)
group2<- summarize(group, retraso=mean(dep_delay, na.rm=TRUE))
## `summarise()` has grouped output by 'year', 'month'. You can override using the
## `.groups` argument.
arrange(group2, retraso)
## # A tibble: 365 × 4
## # Groups:   year, month [12]
##     year month   day retraso
##    <int> <int> <int>   <dbl>
##  1  2013     9    24 -1.33  
##  2  2013    10     2 -0.920 
##  3  2013    11     9 -0.629 
##  4  2013     9     6 -0.398 
##  5  2013     9     5 -0.388 
##  6  2013    10    29 -0.349 
##  7  2013     9     7 -0.250 
##  8  2013    11     5 -0.183 
##  9  2013    10    19 -0.107 
## 10  2013    10     1 -0.0990
## # … with 355 more rows
#La fecha con menor retraso fue el 24 de Septiembre del 2013.

#17 Obtén el número de vuelos por aerlorínea y destino
#Identifica aerolínea y destino con mayor número de vuelos ordenando el resultado anterior de forma descendente
conteo <- flights %>%
  group_by(carrier, dest) %>%
  summarize(total = n())
## `summarise()` has grouped output by 'carrier'. You can override using the
## `.groups` argument.
conteo
## # A tibble: 314 × 3
## # Groups:   carrier [16]
##    carrier dest  total
##    <chr>   <chr> <int>
##  1 9E      ATL      59
##  2 9E      AUS       2
##  3 9E      AVL      10
##  4 9E      BGR       1
##  5 9E      BNA     474
##  6 9E      BOS     914
##  7 9E      BTV       2
##  8 9E      BUF     833
##  9 9E      BWI     856
## 10 9E      CAE       3
## # … with 304 more rows
#La aerolínea con mayor número de vuelos es 'DL' (Delta) y el destino con el mayor número de vuelos es ATL (Atlanta).

#18 Obtén la máxima distancias recorrida por aerolínea y destino, ordena en forma descendente por máxima distancia recorrida
dist <- flights %>%
  group_by(carrier,dest) %>%
  summarize(max_distancia = sum(distance))
## `summarise()` has grouped output by 'carrier'. You can override using the
## `.groups` argument.
dist
## # A tibble: 314 × 3
## # Groups:   carrier [16]
##    carrier dest  max_distancia
##    <chr>   <chr>         <dbl>
##  1 9E      ATL           44784
##  2 9E      AUS            3042
##  3 9E      AVL            5990
##  4 9E      BGR             378
##  5 9E      BNA          362500
##  6 9E      BOS          170918
##  7 9E      BTV             516
##  8 9E      BUF          250247
##  9 9E      BWI          157504
## 10 9E      CAE            1851
## # … with 304 more rows
#La aerolínea con mayor distancia recorrida es 'UA' (United Airlines) y el destino es SFO (San Fransisco).

#19 Obtén el tiempo de vuelo por aerolínea y destino, ordena en forma descendente por la suma_tiempo_vuelo e identifica las 3 aerolíneas con sus destinos que han volado más tiempo
tiempo <- flights %>%
  group_by(carrier, dest) %>%
  summarize(suma_tiempo_vuelo = sum(air_time, na.rm = TRUE))
## `summarise()` has grouped output by 'carrier'. You can override using the
## `.groups` argument.
tiempo
## # A tibble: 314 × 3
## # Groups:   carrier [16]
##    carrier dest  suma_tiempo_vuelo
##    <chr>   <chr>             <dbl>
##  1 9E      ATL                6726
##  2 9E      AUS                 444
##  3 9E      AVL                 922
##  4 9E      BGR                   0
##  5 9E      BNA               52335
##  6 9E      BOS               33201
##  7 9E      BTV                  97
##  8 9E      BUF               44750
##  9 9E      BWI               31620
## 10 9E      CAE                 313
## # … with 304 more rows
#Las aerolineás con más tiempo volado son United Airlines (SFO, LAX, IAH), American Airlines (DFW, LAX, MIA) y Delta (ATL, LAX, SFO).

Renombrando campos en un data frame con rename()

#20 En la consulta 18 renombra el campo max_distancia por distancia_máxima_recorrida
nombre <- dist %>% rename(distancia_máxima_recorrida = max_distancia)
nombre
## # A tibble: 314 × 3
## # Groups:   carrier [16]
##    carrier dest  distancia_máxima_recorrida
##    <chr>   <chr>                      <dbl>
##  1 9E      ATL                        44784
##  2 9E      AUS                         3042
##  3 9E      AVL                         5990
##  4 9E      BGR                          378
##  5 9E      BNA                       362500
##  6 9E      BOS                       170918
##  7 9E      BTV                          516
##  8 9E      BUF                       250247
##  9 9E      BWI                       157504
## 10 9E      CAE                         1851
## # … with 304 more rows