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.