2012-12-11 54 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 
相关问题