Capítulo9 Transformación: Seleccionar variables

Fecha de la última revisión

## [1] "2026-09-02"

9.1 Funciones en este módulo

  • starts_with() # selecciona variables que empiezan con una palabra o letra
  • ends_with() # selecciona variables que terminan con una palabra o letra
  • rename() # cambiar el nombre de una variable
  • contains() # selecciona variables que contienen una palabra o letra
  • everything() # selecciona todas las variables
  • if_else() # reemplaza valores en una columna basado en una condición

Es una función para seleccionar basado en una características del nombre de la columna

Los ayudantes como starts_with(), ends_with() y contains() te evitan escribir cada nombre de columna a mano, sobre todo en tablas con muchas variables.

library(datos)
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"
library(tidyverse)
vuelos %>% 
  dplyr::select(horario_salida)
## # A tibble: 336,776 × 1
##    horario_salida
##             <int>
##  1            517
##  2            533
##  3            542
##  4            544
##  5            554
##  6            554
##  7            555
##  8            557
##  9            557
## 10            558
## # ℹ 336,766 more rows
vuelos %>% 
  dplyr::select(starts_with("horario"))
## # A tibble: 336,776 × 2
##    horario_salida horario_llegada
##             <int>           <int>
##  1            517             830
##  2            533             850
##  3            542             923
##  4            544            1004
##  5            554             812
##  6            554             740
##  7            555             913
##  8            557             709
##  9            557             838
## 10            558             753
## # ℹ 336,766 more rows
vuelos %>% 
  dplyr::select(ends_with("salida"))
## # A tibble: 336,776 × 2
##    horario_salida atraso_salida
##             <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
## # ℹ 336,766 more rows
vuelos %>% 
  dplyr::select(contains("salida"))
## # A tibble: 336,776 × 3
##    horario_salida salida_programada atraso_salida
##             <int>             <int>         <dbl>
##  1            517               515             2
##  2            533               529             4
##  3            542               540             2
##  4            544               545            -1
##  5            554               600            -6
##  6            554               558            -4
##  7            555               600            -5
##  8            557               600            -3
##  9            557               600            -3
## 10            558               600            -2
## # ℹ 336,766 more rows
vuelos %>% 
  dplyr::select(contains("ue"))
## # A tibble: 336,776 × 2
##    vuelo tiempo_vuelo
##    <int>        <dbl>
##  1  1545          227
##  2  1714          227
##  3  1141          160
##  4   725          183
##  5   461          116
##  6  1696          150
##  7   507          158
##  8  5708           53
##  9    79          140
## 10   301          138
## # ℹ 336,766 more rows
#vuelos %>%
# dplyr::filter(contains("AA")) # no funciona con filter

vuelos %>%
  dplyr::filter(aerolinea %in% c("AA", "DL"))
## # A tibble: 80,839 × 19
##     anio   mes   dia horario_salida salida_programada atraso_salida
##    <int> <int> <int>          <int>             <int>         <dbl>
##  1  2013     1     1            542               540             2
##  2  2013     1     1            554               600            -6
##  3  2013     1     1            558               600            -2
##  4  2013     1     1            559               600            -1
##  5  2013     1     1            602               610            -8
##  6  2013     1     1            606               610            -4
##  7  2013     1     1            606               610            -4
##  8  2013     1     1            615               615             0
##  9  2013     1     1            623               610            13
## 10  2013     1     1            628               630            -2
## # ℹ 80,829 more rows
## # ℹ 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>

9.2 rename()

rename(nuevo = viejo) — cambiar el nombre de columnas.

  • Qué hace: renombra columnas; el nombre nuevo va primero, el original después.
  • Relacionadas: select(nuevo = viejo, ...) renombra y selecciona a la vez; everything() reordena poniendo unas columnas al frente y el resto después.

Cambiar el nombre de la columna

vuelos %>% 
  rename(aeropuerto_origen=origen) %>% 
  rename(aeropuerto_destino=destino) %>% 
  dplyr::select(contains("aeropuerto")) # nombre nuevo= nombre original
## # A tibble: 336,776 × 2
##    aeropuerto_origen aeropuerto_destino
##    <chr>             <chr>             
##  1 EWR               IAH               
##  2 LGA               IAH               
##  3 JFK               MIA               
##  4 JFK               BQN               
##  5 LGA               ATL               
##  6 EWR               ORD               
##  7 EWR               FLL               
##  8 LGA               IAD               
##  9 JFK               MCO               
## 10 LGA               ORD               
## # ℹ 336,766 more rows

9.3 Reorganizar el orden de las columnas, usando select() y everything() en la misma función

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>
vuelos %>% 
    dplyr::select(distancia, aerolinea, everything())
## # A tibble: 336,776 × 19
##    distancia aerolinea  anio   mes   dia horario_salida salida_programada
##        <dbl> <chr>     <int> <int> <int>          <int>             <int>
##  1      1400 UA         2013     1     1            517               515
##  2      1416 UA         2013     1     1            533               529
##  3      1089 AA         2013     1     1            542               540
##  4      1576 B6         2013     1     1            544               545
##  5       762 DL         2013     1     1            554               600
##  6       719 UA         2013     1     1            554               558
##  7      1065 B6         2013     1     1            555               600
##  8       229 EV         2013     1     1            557               600
##  9       944 B6         2013     1     1            557               600
## 10       733 AA         2013     1     1            558               600
## # ℹ 336,766 more rows
## # ℹ 12 more variables: atraso_salida <dbl>, horario_llegada <int>,
## #   llegada_programada <int>, atraso_llegada <dbl>, vuelo <int>,
## #   codigo_cola <chr>, origen <chr>, destino <chr>, tiempo_vuelo <dbl>,
## #   hora <dbl>, minuto <dbl>, fecha_hora <dttm>

Seleccionar de un conjunto de variables en orden que aparece en el data.frame

vuelos |> dplyr::select(mes:salida_programada)
## # A tibble: 336,776 × 4
##      mes   dia horario_salida salida_programada
##    <int> <int>          <int>             <int>
##  1     1     1            517               515
##  2     1     1            533               529
##  3     1     1            542               540
##  4     1     1            544               545
##  5     1     1            554               600
##  6     1     1            554               558
##  7     1     1            555               600
##  8     1     1            557               600
##  9     1     1            557               600
## 10     1     1            558               600
## # ℹ 336,766 more rows
x=c(10:15)


x
## [1] 10 11 12 13 14 15
vuelos[,c(4:7)]
## # A tibble: 336,776 × 4
##    horario_salida salida_programada atraso_salida horario_llegada
##             <int>             <int>         <dbl>           <int>
##  1            517               515             2             830
##  2            533               529             4             850
##  3            542               540             2             923
##  4            544               545            -1            1004
##  5            554               600            -6             812
##  6            554               558            -4             740
##  7            555               600            -5             913
##  8            557               600            -3             709
##  9            557               600            -3             838
## 10            558               600            -2             753
## # ℹ 336,766 more rows

  1. Ejercicios:

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

https://es.r4ds.hadley.nz/05-transform.html#ejercicios-2

?mean

library(readr)
url_COVID_PR <- read_csv("Datos/url_COVID_PR.csv")

url_COVID_PR
## # A tibble: 587 × 18
##     ...1 Fecha   Muertes IncrementoMuertes CasosPCR_Salud IncCasosPCR_Salud
##    <dbl> <chr>     <dbl>             <dbl>          <dbl>             <dbl>
##  1     1 3/12/20       0                 0             NA                NA
##  2     2 3/13/20       0                 0             NA                NA
##  3     3 3/14/20       0                 0             NA                NA
##  4     4 3/15/20       0                 0             NA                NA
##  5     5 3/16/20       0                 0             NA                NA
##  6     6 3/17/20       0                 0             NA                NA
##  7     7 3/18/20       0                 0             NA                NA
##  8     8 3/19/20       0                 0             NA                NA
##  9     9 3/20/20       0                 0             NA                NA
## 10    10 3/21/20       0                 0             NA                NA
## # ℹ 577 more rows
## # ℹ 12 more variables: CasosSaludNuevo <dbl>, IncCasosSaludNuevo <dbl>,
## #   HospitCOV19 <dbl>, CamasICU <dbl>, CamasICU_disp <dbl>, Ventiladores <dbl>,
## #   MuertesSalud <dbl>, IncMueSalud <dbl>, VacDoses <dbl>, VacAdm <dbl>,
## #   N1MoreDoses <dbl>, N2Doses <dbl>
library(tidyverse)
df2=url_COVID_PR %>% 
  dplyr::select(IncCasosSaludNuevo) %>% 
  mutate(Cambios_Casos=IncCasosSaludNuevo-lag(IncCasosSaludNuevo,7)) 





df2
## # A tibble: 587 × 2
##    IncCasosSaludNuevo Cambios_Casos
##                 <dbl>         <dbl>
##  1                  2            NA
##  2                  3            NA
##  3                  3            NA
##  4                  0            NA
##  5                  9            NA
##  6                  7            NA
##  7                  6            NA
##  8                  5             3
##  9                 14            11
## 10                 12             9
## # ℹ 577 more rows