2012-12-11 50 views
7

什麼是最安全的方式擺脫/從對象中刪除data.table類,將其重新轉換爲data.frame?安全地將data.table轉換回data.frame

我問,因爲我使用的腳本,依賴於下面的代碼:

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

data.table包顯然不喜歡這個,但它的工作使用data.frame類的對象罰款。

+1

這甚至不能在data.frame上工作。 DF < - data.frame(a = 1:2,b = 1:2); colnames(DF)[3] < - 'z''在colnames <-'('* tmp *',value = c(「a」,「b」,「hello」)中給出錯誤*錯誤): 'names'屬性[3]必須與向量的長度相同[2] * – mnel

+0

編輯帖子以準確描述'data.table'中的哪些內容不起作用 – Michael

回答

11

data.tables的as.data.frame方法大概是最安全的使用方法。 (試着輸入getAnywhere("as.data.frame.data.table"),看看到底它做什麼。)

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

現在我們有'setDF' –

4

如果你願意你的腳本轉換爲data.table,您可以使用使用:=參考分配,這將自動分配給(ncol(youdata)+1)th列,並且可以將名稱的字符向量傳遞給函數的LHS。它將通過引用進行分配,因此不需要複製!

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

DT[,'test' := 3] 


DT 
    a b test 
1: 1 2 3 
相關問題