2012-05-14 10 views
5

Frage zum R-Paket data.table: Wie werden mehrere data.table-Spalten in einem Speicher-effizienten Weg entfernt?R: Wie man Spalten in einer data.table löscht?

Angenommen, die zu löschenden Spaltennamen sind im Vektor deleteCol gespeichert.

In a data.frame, it is: 
DF <- DF[deleteCol] <- list() 

Für data.table, habe ich versucht:

DT[, deleteCol, with=FALSE] <- list() 

aber das gab unused argument(s) (with = FALSE)

Dank!

Antwort

5

ok hier sind ein paar Optionen. Das letzte scheint genau das, was Sie wollen ...

x<-1:5 
y<-1:5 
z<-1:5 
xy<-data.table(x,y,z) 
NEWxy<-subset(xy, select = -c(x,y)) #removes column x and y 

und

id<-c("x","y") 
newxy<-xy[, id, with=FALSE] 
newxy #gives just x and y e.g. 

    # x y 
#[1,] 1 1 
#[2,] 2 2 
#[3,] 3 3 
#[4,] 4 4 
#[5,] 5 5 

und schließlich, was Sie wirklich wollen:

anotherxy<-xy[,id:=NULL,with=FALSE] # removes comuns x and y that are in id 

#  z 
#[1,] 1 
#[2,] 2 
#[3,] 3 
#[4,] 4 
#[5,] 5 
+0

, dass der Trick! Vielen Dank! –

+4

+1. Keine Notwendigkeit für die 'anotherxy <-' obwohl. ': =' '' xy' 'wird durch Referenz geändert. Wenn Sie eine modifizierte Kopie haben wollen, müssen Sie 'copy()' explizit; z. B. 'anotherxy <- copy (xy) [, id: = NULL, mit = FALSE]'. –

Verwandte Themen