Problema
Deseamos excluir variables de un data frame de acuerdo a su nombre. En nuestro ejemplo usamos el data frame iris, y queremos descartar las variables Sepal.Length y Petal.Width.
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
Soluciones
Hay múltiples opciones.
# Opción 1
iris[, -which(names(iris) %in% c("Sepal.Length", "Petal.Width"))]
# Opción 2
iris[ , !names(iris) %in% c("Sepal.Length","Petal.Width")]
# Opción 3
subset(iris, select = -c(Sepal.Length, Petal.Width))
library(dplyr)
iris %>% select(-c(Sepal.Length, Petal.Width))
library(data.table)
DT = as.data.table(iris)
DT[ , !names(DT) %in% c("Sepal.Length", "Petal.Width"), with = FALSE]
# Otra opción
subset(DT, select=-c(Sepal.Length, Petal.Width))
Resultado
Las tres variables restantes. Solamente mostramos las 6 primeras filas
Sepal.Width Petal.Length Species
1 3.5 1.4 setosa
2 3.0 1.4 setosa
3 3.2 1.3 setosa
4 3.1 1.5 setosa
5 3.6 1.4 setosa
6 3.9 1.7 setosa
Notas
Hay diferencias sutiles entre la primera opción con el paquete base -which y la segunda con la función !. Si con -which especificamos nombres que no encuentra en el data frame devolverá un data frame vacío con cero columnas. Mientras que si sucede lo mismo con !, devolverá el data frame original sin modificar.
La sintaxis con dplyr es bastante sencilla. Con data.table es muy similar a las utilizadas con el paquete base. No obstante, es necesario especificar el argumento with = FALSE o devolverá un vector lógico. También podemos emplear con data.table la función subset.
Entradas relacionadas
Referencias
No hay comentarios:
Publicar un comentario