La función select() en R: elegir columnas (y su alternativa en R base)
select() se queda con las columnas que le digas y descarta el resto. Viene en dplyr:
install.packages("dplyr")
library(dplyr)
Como con filter(), R base hace lo mismo sin instalar nada. Lo vemos al final.
Ejemplo simple
library(dplyr)
select(iris, Sepal.Length, Species)
Nombres de columna sin comillas, separados por comas. Y para quitar una en vez de elegirlas todas:
select(iris, -Species)
También admite rangos y ayudantes que están bastante bien:
select(iris, Sepal.Length:Petal.Length) # de una a otra
select(iris, starts_with("Sepal")) # las que empiezan por...
Lo mismo en R base
Con corchetes, indicando las columnas después de la coma:
iris[, c("Sepal.Length", "Species")]
Para quitar una columna:
iris[, names(iris) != "Species"]
Y el equivalente de starts_with(), usando grepl():
iris[, grepl("^Sepal", names(iris))]
Ese ^Sepal es una expresión regular: el acento circunflejo significa "que empiece por".
También tienes subset() con su argumento select, que se lee bastante mejor:
subset(iris, select = c(Sepal.Length, Species))
Ejemplo algo más completo: reordenar y renombrar
Un detalle útil: al seleccionar columnas también estás decidiendo su orden.
ordenado <- iris[, c("Species", "Sepal.Length", "Sepal.Width")]
head(ordenado)
La especie pasa a ser la primera columna. Va muy bien antes de exportar una tabla para que alguien la lea.
Y para renombrar sobre la marcha, en R base:
tabla <- iris[, c("Species", "Sepal.Length")]
names(tabla) <- c("especie", "largo_sepalo")
head(tabla)
Nuestra recomendación: para elegir columnas, los corchetes o subset() de R base te sobran. select() compensa cuando tienes tablas con decenas de columnas y quieres usar sus ayudantes (starts_with(), contains(), where()), pero en el día a día no justifica añadir una dependencia.