Eliminar una columna completa de un data.frame en R

Resuelto Nanami asked hace 54 años • 9 respuestas

¿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.

Nanami avatar Jan 01 '70 08:01 Nanami
Aceptado

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
Joshua Ulrich avatar Jun 08 '2011 23:06 Joshua Ulrich

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 acolumna que podrías hacer

Data <- subset( Data, select = -a )

y para eliminar las columnas by dpodrías hacer

Data <- subset( Data, select = -c(d, b ) )

Puede eliminar todas las columnas entre dy bcon:

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 ?subsetdocumentació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.

Prasad Chalasani avatar Jun 09 '2011 02:06 Prasad Chalasani