separar - Eliminar una columna completa de un data.frame en R
extraer columnas de un data frame en r (5)
(Para completar) Si desea eliminar las columnas por nombre, puede hacer esto:
cols.dont.want <- "genome"
cols.dont.want <- c("genome", "region") # if you want to remove multiple columns
data <- data[, ! names(data) %in% cols.dont.want, drop = F]
La inclusión de drop = F
garantiza que el resultado seguirá siendo un data.frame
aunque solo quede una columna.
¿Alguien sabe cómo eliminar una columna completa de un data.frame en R? Por ejemplo, si me dan este data.frame:
> head(data)
chr genome region
1 chr1 hg19_refGene CDS
2 chr1 hg19_refGene exon
3 chr1 hg19_refGene CDS
4 chr1 hg19_refGene exon
5 chr1 hg19_refGene CDS
6 chr1 hg19_refGene exon
Y quiero eliminar la 2ª columna.
Con esto puedes eliminar la column
y almacenar la variable
en otra variable
.
df = subset(data, select = -c(genome) )
Las respuestas publicadas son muy buenas cuando se trabaja con data.frame
s. Sin embargo, estas tareas pueden ser bastante ineficientes desde la perspectiva de la memoria. Con datos grandes, la eliminación de una columna puede llevar un tiempo inusualmente largo y / o fallar debido a errores de falta out of memory
. Package data.table
ayuda a resolver este problema con el operador: :=
:
library(data.table)
> dt <- data.table(a = 1, b = 1, c = 1)
> dt[,a:=NULL]
b c
[1,] 1 1
Debería juntar un ejemplo más grande para mostrar las diferencias. Voy a actualizar esta respuesta en algún momento con eso.
Para eliminar una o más columnas por nombre, cuando se conocen los nombres de columna (en lugar de determinarse en tiempo de ejecución), me gusta la sintaxis de subset()
. Por ejemplo, para el marco de datos.
df <- data.frame(a=1:3, d=2:4, c=3:5, b=4:6)
para eliminar sólo la columna que podría hacer
Data <- subset( Data, select = -a )
y para eliminar las columnas d
que pudieras hacer.
Data <- subset( Data, select = -c(d, b ) )
Puedes eliminar todas las columnas entre d
y b
con:
Data <- subset( Data, select = -c( d : b )
Como dije anteriormente, esta sintaxis solo funciona cuando se conocen los nombres de las columnas. No funcionará cuando, por ejemplo, los nombres de columna se determinen mediante programación (es decir, asignados a una variable). Reproduciré esta advertencia de la documentación del ?subset
Advertencia:
Esta es una función de conveniencia para uso interactivo. Para la programación, es mejor usar las funciones de subconjunto estándar como ''['', y en particular la evaluación no estándar del argumento ''subconjunto'' puede tener consecuencias imprevistas.
Puedes configurarlo en NULL
.
> Data$genome <- NULL
> head(Data)
chr region
1 chr1 CDS
2 chr1 exon
3 chr1 CDS
4 chr1 exon
5 chr1 CDS
6 chr1 exon
Como se señala en los comentarios, aquí hay algunas otras posibilidades:
Data[2] <- NULL # Wojciech Sobala
Data[[2]] <- NULL # same as above
Data <- Data[,-2] # Ian Fellows
Data <- Data[-2] # same as above
Puede eliminar varias columnas a través de:
Data[1:2] <- list(NULL) # Marek
Data[1:2] <- NULL # does not work!
Sin embargo, tenga cuidado con el subconjunto de matrices, ya que puede terminar con un vector:
Data <- Data[,-(2:3)] # vector
Data <- Data[,-(2:3),drop=FALSE] # still a data.frame