2012-12-11 10 views
7

Jaki jest najbezpieczniejszy sposób na pozbycie się/usunięcie klasy data.table z obiektu, przekształcając go z powrotem w obiekt data.frame?bezpiecznie przekształcić dane z powrotem w dane.frame

Pytam ponieważ używam skrypt, który opiera się na następującym kodem:

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

W data.table pakiety najwyraźniej nie podoba, ale to działa grzywny za pomocą obiektów klasy data.frame.

+1

to nawet nie działa na data.frame. 'DF <- data.frame (a = 1: 2, b = 1: 2); colnames (DF) [3] <- 'z'' daje błąd * Błąd w 'colnames <-' (' * tmp * ', value = c (" a "," b "," hello ")): Atrybut "names" [3] musi być tej samej długości co wektor [2] * – mnel

+0

Edytował post, aby opisać dokładnie to, co nie działało w 'data.table' – Michael

Odpowiedz

11

Metoda as.data.frame dla data.tables jest prawdopodobnie najbezpieczniejszą funkcją do użycia. (Spróbuj wpisując getAnywhere("as.data.frame.data.table") aby zobaczyć dokładnie to, co robi.)

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

Obecnie mamy' setDF' –

4

Jeśli są chętni do konwersji skryptu data.table, można użyć wykorzystanie := przypisać odnośnik, zostanie automatycznie przypisany do kolumny (ncol(youdata)+1)th i możesz przekazać wektor znaków nazw do LHS tej funkcji. Przypisuje na zasadzie odniesienia, więc nie ma kopiowania!

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

DT[,'test' := 3] 


DT 
    a b test 
1: 1 2 3 
Powiązane problemy