2012-03-21 13 views

Respuesta

37

Puede hacerlo utilizando subconjuntos vectoriales. En primer lugar, crear un conjunto de datos ficticios:

R> dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3) 

A continuación, utilice el operador ! para revertir la selección:

R> dd[ ,!(colnames(dd) == "A")] 

    B C D 
1 1 1 1 
2 2 2 2 
3 3 3 3 

Alternativamente, usted podría tener:

  • Una versión ligeramente más corto (cortesía de @Tomas):

    dd[ , names(dd) != "A"] 
    
  • Para hacer frente a múltiples columnas (cortesía de @Tyler)

    dd[ ,!(colnames(dd) %in% c("A", "B"))] 
    
7

Se podría utilizar la función which() para identificar la columna que ser eliminado.

dd <- data.frame(A = 1:5, B = 1:5, C=1:5) 

dd[, -which(names(dd) == "A")] 

o positivamente

dd[, which(names(dd) != "A")] 

Sin embargo, si no hay una columna llamada "A", se llega a una trama de datos con 0 columnas y filas nrow(dd). Por lo tanto, sería bueno verificar la existencia de una columna llamada "A".

if(any(names(dd) == "A")) { 
    dd[, which(names(dd) != "A")] 
} 
5

La función subset ya se permite este tipo de sintaxis, a partir de los ejemplos en la página de ayuda:

subset(airquality, Day == 1, select = -Temp) 
0

Para anular la selección de múltiples columnas se puede utilizar el paquete de dplyr. Como un ejemplo:

dd = data.frame(A = 1:3, B = 1:3, C=1:3, D=1:3) 

library(dplyr) 
newdd <- select(dd, -A,-C) 

esta es otra manera además de lo que sugirió @csgillespie.

Cuestiones relacionadas