Capítulo6 Transformación: Operaciones boolenas y lógicas

Fecha de la ultima revisión

## [1] "2024-11-07"

El tema proviene de los siguientes sitios.

English: https://r4ds.had.co.nz/transform.html

Español: https://es.r4ds.hadley.nz/05-transform.html


library(tidyverse)
library(datos)
head(vuelos)
## # A tibble: 6 × 19
##    anio   mes   dia horario_salida salida_programada atraso_salida
##   <int> <int> <int>          <int>             <int>         <dbl>
## 1  2013     1     1            517               515             2
## 2  2013     1     1            533               529             4
## 3  2013     1     1            542               540             2
## 4  2013     1     1            544               545            -1
## 5  2013     1     1            554               600            -6
## 6  2013     1     1            554               558            -4
## # ℹ 13 more variables: horario_llegada <int>, llegada_programada <int>,
## #   atraso_llegada <dbl>, aerolinea <chr>, vuelo <int>, codigo_cola <chr>,
## #   origen <chr>, destino <chr>, tiempo_vuelo <dbl>, distancia <dbl>,
## #   hora <dbl>, minuto <dbl>, fecha_hora <dttm>

Tema de este modulo:

  • Filtrar filas con filter()
  • Seleccionar columnas con select()
  • Agrupar con group_by()
  • Resumir con summarise()
  • Ordenar con arrange()
  • funciones Booleanas y lógicas

6.1 Agrupar por múltiples variables

Aquí se agrupa por día y mes

6.2 Operaciones lógicas boolean:

  • & “ampersand” == “conjunción”
  • “|” or= “o”
  • !, no incluye, excluir….
  • %in%, filtrar para múltiples valores
  • ==, es igual a… “exactamente”
  • “<” menor que
  • “>” mayor que
  • “<=” es menor o igual
  • “>=” es mayor o igual

Bollean, que incluye múltiples opciones %in%

vuelos %>% 
  dplyr::select(anio, mes, dia, atraso_llegada, destino) %>% 
  filter(destino =="SJU") %>% 
  filter(mes == 12 & dia ==25) %>% 
 # filter(mes == 12) %>%
  group_by(dia, mes) %>% 
  summarise(atraso = mean(atraso_llegada, na.rm = TRUE))
## # A tibble: 1 × 3
## # Groups:   dia [1]
##     dia   mes atraso
##   <int> <int>  <dbl>
## 1    25    12   3.57

vuelos %>% 
  dplyr::select(anio, mes, dia, atraso_salida) %>% 
  group_by(mes) %>% 
  filter(mes %in% c(1:6)) %>% # mes entre 1 y 6
  summarise(atraso = mean(atraso_salida, na.rm = TRUE))
## # A tibble: 6 × 2
##     mes atraso
##   <int>  <dbl>
## 1     1   10.0
## 2     2   10.8
## 3     3   13.2
## 4     4   13.9
## 5     5   13.0
## 6     6   20.8

6.2.1 Otra alternativa para filtrar

6.2.1.1 “|”

vuelos %>% 
  dplyr::select(anio, mes, dia, atraso_salida) %>% 
  filter(mes == 1 | mes == 12) |>  # mes 1 o 12 
  summarise(atraso = mean(atraso_salida, na.rm = TRUE))
## # A tibble: 1 × 1
##   atraso
##    <dbl>
## 1   13.3

6.2.1.2 & el “y”

names(vuelos)
##  [1] "anio"               "mes"                "dia"               
##  [4] "horario_salida"     "salida_programada"  "atraso_salida"     
##  [7] "horario_llegada"    "llegada_programada" "atraso_llegada"    
## [10] "aerolinea"          "vuelo"              "codigo_cola"       
## [13] "origen"             "destino"            "tiempo_vuelo"      
## [16] "distancia"          "hora"               "minuto"            
## [19] "fecha_hora"
vuelos %>% 
  dplyr::select(anio, mes, dia, atraso_salida, aerolinea) %>% 
  filter(mes == 12 & dia == 25 & aerolinea=="AA")
## # A tibble: 78 × 5
##     anio   mes   dia atraso_salida aerolinea
##    <int> <int> <int>         <dbl> <chr>    
##  1  2013    12    25             2 AA       
##  2  2013    12    25            -4 AA       
##  3  2013    12    25             1 AA       
##  4  2013    12    25             0 AA       
##  5  2013    12    25            -3 AA       
##  6  2013    12    25            -2 AA       
##  7  2013    12    25            26 AA       
##  8  2013    12    25            -7 AA       
##  9  2013    12    25            -6 AA       
## 10  2013    12    25            21 AA       
## # ℹ 68 more rows

6.3 Ejercicios

Como se seleccionaría los meses de diciembre pero desde la del 25 o más


6.4

!, excluye algo, En este caso estamos excluyendo los días del 1 al 10

library(datos)
library(tidyverse)
vuelos %>% 
  dplyr::select(anio, mes, dia, atraso_salida, aerolinea) %>%
  filter(mes == 11 & !aerolinea %in% c("AA", "DL")) %>% 
  group_by(aerolinea) %>% 
  summarise(atraso = mean(atraso_salida, na.rm = TRUE))
## # A tibble: 14 × 2
##    aerolinea atraso
##    <chr>      <dbl>
##  1 9E         7.56 
##  2 AS         3.08 
##  3 B6         3.52 
##  4 EV         9.83 
##  5 F9        13.5  
##  6 FL        16.9  
##  7 HA        -5.44 
##  8 MQ         3.28 
##  9 OO         0.8  
## 10 UA         6.37 
## 11 US         0.576
## 12 VX         7.80 
## 13 WN        11.0  
## 14 YV        10.5

Ejercicios:

Hacer los ejercicios en la sección 5.2.4 del libro en español

5.2.4 Ejercicios

  • Encuentra todos los vuelos que:

  • Tuvieron un retraso de llegada de dos o más horas

  • Volaron a Houston (IAH o HOU)

Cual son estos aeropuertos, Hou == Houston, IAH == George Bush, Texas

  • Seleciona solamente los vuelos que fueron operados por United, American o Delta

  • Selecciona solamente los vuelos que partieron en invierno del hemisferio sur (julio, agosto y septiembre)

  • Selecciona solamente los vuelos que llegaron más de dos horas tarde, pero no salieron tarde

  • Selecciona solamente los vuelos que se retrasaron por lo menos una hora, pero repusieron más de 30 minutos en vuelo

  • Selecciona solamente los vuelos que partieron entre la medianoche y las 6a.m. (incluyente)

  • Otra función de dplyr que es útil para usar filtros es between(). ¿Qué hace? ¿Puedes usarla para simplificar el código necesario para responder a los desafíos anteriores?

  • Determinar cual “aerolinea” tiene más vuelos


6.4.1 La función arrange()

arrange()


vuelos %>% 
  dplyr::select(horario_salida) %>% 
  arrange() |> 
  head(n=10)
## # A tibble: 10 × 1
##    horario_salida
##             <int>
##  1            517
##  2            533
##  3            542
##  4            544
##  5            554
##  6            554
##  7            555
##  8            557
##  9            557
## 10            558
vuelos %>% 
  arrange(desc(horario_salida)) |> 
  head(n=10)
## # A tibble: 10 × 19
##     anio   mes   dia horario_salida salida_programada atraso_salida
##    <int> <int> <int>          <int>             <int>         <dbl>
##  1  2013    10    30           2400              2359             1
##  2  2013    11    27           2400              2359             1
##  3  2013    12     5           2400              2359             1
##  4  2013    12     9           2400              2359             1
##  5  2013    12     9           2400              2250            70
##  6  2013    12    13           2400              2359             1
##  7  2013    12    19           2400              2359             1
##  8  2013    12    29           2400              1700           420
##  9  2013     2     7           2400              2359             1
## 10  2013     2     7           2400              2359             1
## # ℹ 13 more variables: horario_llegada <int>, llegada_programada <int>,
## #   atraso_llegada <dbl>, aerolinea <chr>, vuelo <int>, codigo_cola <chr>,
## #   origen <chr>, destino <chr>, tiempo_vuelo <dbl>, distancia <dbl>,
## #   hora <dbl>, minuto <dbl>, fecha_hora <dttm>

5.3.1 Ejercicios

Ordena vuelos para encontrar los vuelos más retrasados en salida.

Encuentra los vuelos que salieron más temprano.

Ordena vuelos para encontrar los vuelos más rápidos (que viajaron a mayor velocidad).

¿Cuáles vuelos viajaron más lejos?

¿Cuál viajó más cerca?

  • Otra función

    • desc()

6.5 2 Ejercicios:

Hacer los ejercicios en la sección 5.3.1 del libro en español