6.6 Selección
Al igual que con el filtrado de filas, una sola función para seleccionar columnas, select()
. La función devuelve solo las columnas seleccionadas, ya sea utilizando sus nombres o su indexación de posición. El orden en el que coloques las columnas dentro de la función será el orden en el que aparecerán en el resultado final.
dplyr::select()
en lugar de simplemente usar select()
. Si en tu equipo funciona directamente select()
, no te preocupes en mencionar de qué paquete procede.
Ejemplo 6.8 Considerando la base de datos WHO
, seleccionar las columnas Country
, Year
, Polio
, Diph
, utilizando posición y nombre. Mostrar las primeras 6 filas.
# Por posición
%>%
WHO ::select(1,2,17,18) %>%
dplyrhead()
# Country Year Polio Tot_exp
# 1 Afghanistan 2015 6 8.16
# 2 Afghanistan 2014 58 8.18
# 3 Afghanistan 2013 62 8.13
# 4 Afghanistan 2012 67 8.52
# 5 Afghanistan 2011 68 7.87
# 6 Afghanistan 2010 66 9.20
# Por nombre
%>%
WHO ::select(Country, Year, Polio, Diph) %>%
dplyrhead()
# Country Year Polio Diph
# 1 Afghanistan 2015 6 65
# 2 Afghanistan 2014 58 62
# 3 Afghanistan 2013 62 64
# 4 Afghanistan 2012 67 67
# 5 Afghanistan 2011 68 68
# 6 Afghanistan 2010 66 66
Lo más complicado de indexar por posición es justamente saber el número exacto de cada columna. En cualquiera de los casos, revisar los nombres de columnas se puede realizar con names()
:
names(WHO)
# [1] "Country" "Year" "Status1" "Category" "Level" "Status2"
# [7] "St2_categ" "Life_exp" "Ad_mort" "Inf_deaths" "Alcohol" "Per_exp"
# [13] "Hep_B" "Measles" "BMI" "U5Y" "Polio" "Tot_exp"
# [19] "Diph" "AIDS" "GDP" "Pop" "Thin1_19" "Thin5_9"
# [25] "Income" "Schooling"
6.6.1 Seleccionar con funciones especiales
Para aprovechar al máximo la función select()
, se puede incluir en ella funciones de selección específicas con funciones de ayuda.
Función | Descripción |
---|---|
select(DF, contains(".")) |
Selecciona las columnas cuyo nombre contengan ese carácter. |
select(DF, num_range("a", 1:5)) |
Selecciona las columnas a1, a2, a3, a4, y a5. |
select(DF, starts_with("XYZ")) |
Selecciona las columnas cuyo nombre comience con “XYZ”. |
select(DF, ends_with("XYZ")) |
Selecciona las columnas cuyo nombre termina en “XYZ”. |
Ejemplo 6.9 Seleccionar todas las columnas que contengan el carácter _
. Mostrar las primeras 6 filas.
%>%
WHO ::select(contains("_")) %>%
dplyrhead()
# St2_categ Life_exp Ad_mort Inf_deaths Per_exp Hep_B Tot_exp Thin1_19 Thin5_9
# 1 1 65.0 263 62 71.280 65 8.16 17.2 17.3
# 2 2 59.9 271 64 73.524 62 8.18 17.5 17.5
# 3 2 59.9 268 66 73.219 64 8.13 17.7 17.7
# 4 1 59.5 272 69 78.184 67 8.52 17.9 18.0
# 5 2 59.2 275 71 7.097 68 7.87 18.2 18.2
# 6 1 58.8 279 74 79.679 66 9.20 18.4 18.4
La función num_range("TEXTO", RANGO)
crea un vector de caracteres de la misma manera que lo hace paste0()
. La diferencia es que num_range()
solo funciona dentro de select()
.
# Resultado de paste0() idéntico a lo que se obtendría con num_range()
paste0("Status", 1:5)
# [1] "Status1" "Status2" "Status3" "Status4" "Status5"
Ejemplo 6.10 Seleccionar todas las columnas Status1
y Status2
con la función num_range()
. Mostrar las primeras 6 filas.
# Con num_range()
%>%
WHO ::select(num_range("Status", 1:2)) %>%
dplyrhead()
# Status1 Status2
# 1 Developing Developing in an inconsisten rate of increase
# 2 Developing No deteminated by the OMS, but is OK
# 3 Developing No deteminated by the OMS, but is OK
# 4 Developing Developing in an inconsisten rate of increase
# 5 Developing No deteminated by the OMS, but is OK
# 6 Developing Developing in an inconsisten rate of increase
# Con paste0()
%>%
WHO ::select(paste0("Status", 1:2)) %>%
dplyrhead()
# Status1 Status2
# 1 Developing Developing in an inconsisten rate of increase
# 2 Developing No deteminated by the OMS, but is OK
# 3 Developing No deteminated by the OMS, but is OK
# 4 Developing Developing in an inconsisten rate of increase
# 5 Developing No deteminated by the OMS, but is OK
# 6 Developing Developing in an inconsisten rate of increase
Ejemplo 6.11 Seleccionar las columnas cuyo nombre comience con la letra S. Mostrar las primeras 6 filas.
# Con num_range()
%>%
WHO ::select(starts_with("S")) %>%
dplyrhead()
# Status1 Status2 St2_categ Schooling
# 1 Developing Developing in an inconsisten rate of increase 1 10.1
# 2 Developing No deteminated by the OMS, but is OK 2 10.0
# 3 Developing No deteminated by the OMS, but is OK 2 9.9
# 4 Developing Developing in an inconsisten rate of increase 1 9.8
# 5 Developing No deteminated by the OMS, but is OK 2 9.5
# 6 Developing Developing in an inconsisten rate of increase 1 9.2
Ejemplo 6.12 Seleccionar las columnas cuyo nombre termine con la letra o. Mostrar las primeras 6 filas.
# Con num_range()
%>%
WHO ::select(ends_with("o")) %>%
dplyrhead()
# Polio
# 1 6
# 2 58
# 3 62
# 4 67
# 5 68
# 6 66