Eliminar una columna completa de un data.frame en R
¿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 segunda columna.
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 mediante:
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
Para eliminar una o más columnas por nombre, cuando los nombres de las columnas se conocen (en lugar de determinarse en tiempo de ejecución), me gusta la subset()
sintaxis. Por ejemplo, para el marco de datos.
df <- data.frame(a=1:3, d=2:4, c=3:5, b=4:6)
para eliminar solo la a
columna que podrías hacer
Data <- subset( Data, select = -a )
y para eliminar las columnas b
y d
podrías hacer
Data <- subset( Data, select = -c(d, b ) )
Puede 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 las columnas se determinen mediante programación (es decir, se asignen a una variable). Reproduciré esta Advertencia de la ?subset
documentación:
Advertencia:
Esta es una función conveniente diseñada para usarse de forma interactiva. Para la programación, es mejor utilizar funciones de subconjunto estándar como '[' y, en particular, la evaluación no estándar del argumento 'subconjunto' puede tener consecuencias imprevistas.