2012-12-11 3 views
7

Qual è il modo più sicuro per rimuovere/rimuovere la classe data.table da un oggetto, trasformandola in un data.frame?trasformare in modo sicuro un data.table in un data.frame

chiedo perché sto utilizzando script che si basa sulla seguente codice:

newcol.index <- ncol(my.data) +1 
my.data[,newcol.index] <- 3 
colnames(my.data)[newcol.index] <- "test" 

I data.table pacchetti a quanto pare non piace questo, ma funziona multe utilizzando oggetti della classe data.frame.

+1

questo non funziona nemmeno su un data.frame. 'DF <- data.frame (a = 1: 2, b = 1: 2); colnames (DF) [3] <- 'z'' restituisce l'errore * Errore in 'colnames <-' (' * tmp * ', value = c (" a "," b "," ciao ")): L'attributo 'nomi' [3] deve essere della stessa lunghezza del vettore [2] * – mnel

+0

Modificato il post per descrivere esattamente cosa non funzionava in 'data.table' – Michael

risposta

11

Il metodo as.data.frame per data.tables è presumibilmente la funzione più sicura da utilizzare. (Provate a digitare getAnywhere("as.data.frame.data.table") per vedere esattamente quello che fa.)

library(data.table) 
DT <- data.table(a=1:4, b=letters[c(1,1,2,2)], key="a") 

class(as.data.frame(DT)) ## OR: as(X, "data.frame") 
# [1] "data.frame" 
+2

In questi giorni abbiamo' setDF' –

4

Se siete disposti a convertire il vostro script per data.table, è possibile utilizzare l'uso := per assegnare per riferimento, questo assegnerà automaticamente alla colonna (ncol(youdata)+1)th e puoi passare un vettore di caratteri dei nomi all'LHS della funzione. Assegnerà per riferimento, quindi nessuna copia!

DT <- data.table(a = 1, b = 2) 

DT[,'test' := 3] 


DT 
    a b test 
1: 1 2 3