¿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.
Respuestas:
Puedes configurarlo en
NULL
.Como se señaló en los comentarios, aquí hay algunas otras posibilidades:
Puede eliminar varias columnas a través de:
Sin embargo, tenga cuidado con el subconjunto de matrices, ya que puede terminar con un vector:
fuente
Data[-2]
no necesitadrop
argumentos porque siempre regresadata.frame
dedata.frame
. Y creo que esta es una forma mucho mejor de columnas localizadas (y solo columnas) endata.frame
(y es más rápido). Compruebe:cars[-1]
(una columnadata.frame
) o mejorcars[-(1:2)]
:data frame with 0 columns and 50 rows
.Data[c(1,2)]<-list(NULL)
se necesita eliminar varias columnas .Para eliminar una o más columnas por nombre, cuando se conocen los nombres de las columnas (en lugar de determinarse en tiempo de ejecución), me gusta la
subset()
sintaxis. Por ejemplo, para el marco de datospara eliminar solo la
a
columna que podrías hacery para eliminar las columnas
b
yd
que podrías hacerPuede eliminar todas las columnas entre
d
yb
con:Como dije anteriormente, esta sintaxis solo funciona cuando se conocen los nombres de las columnas. No funcionará cuando digamos que los nombres de columna se determinan mediante programación (es decir, asignados a una variable). Reproduciré esta Advertencia de la
?subset
documentación:fuente
(Para completar) Si desea eliminar columnas por nombre, puede hacer esto:
La inclusión
drop = F
asegura que el resultado seguirá siendo undata.frame
incluso si solo queda una columna.fuente
Las respuestas publicadas son muy buenas cuando se trabaja con
data.frame
s. Sin embargo, estas tareas pueden ser bastante ineficientes desde una perspectiva de memoria. Con datos grandes, eliminar una columna puede llevar una cantidad de tiempo inusualmente larga y / o fallar debido aout of memory
errores. El paquetedata.table
ayuda a resolver este problema con el:=
operador:Debería armar un ejemplo más grande para mostrar las diferencias. Actualizaré esta respuesta en algún momento con eso.
fuente
data.table::set
función se puede usar endata.frame
s para eliminar o modificar una columna al instante, sin hacer copias. Ver aquíHay varias opciones para eliminar una o más columnas con
dplyr::select()
y algunas funciones auxiliares. Las funciones auxiliares pueden ser útiles porque algunas no requieren nombrar todas las columnas específicas para descartar. Tenga en cuenta que para soltar columnas usandoselect()
debe usar una guía-
para negar los nombres de columna.Usando los
dplyr::starwars
datos de muestra para alguna variedad en los nombres de columna:También puede colocar por número de columna:
fuente
Con esto puedes eliminar
column
y almacenarvariable
en otrovariable
.fuente