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

Fecha de la ultima revisión

## [1] "2025-08-27"

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 las aerolinea “AA” y “DL”

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

  1. Encuentra todos los vuelos que:
  1. Tuvieron un retraso de llegada de dos o más horas

  2. Volaron a Houston (IAH o HOU)

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

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

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

  3. Selecciona solamente los vuelos excluyendo los dias del 2 al 29 de cualquier mes

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

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

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

  7. 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?

  8. 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