26

要向现有的空data.table版本 1.8.6)添加新列,似乎没有办法在没有被警告的情况下做到这一点。

例子:

dt<-old.table[0]
dt[,new_column:=""]

这会产生警告:

In '[.data.table'(dt, , ':='(new_column,"")):    
Supplied 1 items to be assigned to 0 items of column 'new_column' (1 unused)

有没有办法在没有警告的情况下添加新列?

4

2 回答 2

34

好问题。分配一个空字符向量 ( character()) 而不是长度为 1 的字符向量 ( "")。

> DT = data.table(a=1:3,b=4:6)
> DT2 = DT[0]
> DT2
Empty data.table (0 rows) of 2 cols: a,b
> DT2[,newcol:=character()]    # no warning
> DT2
Empty data.table (0 rows) of 3 cols: a,b,newcol
> sapply(DT2,class)
          a           b      newcol 
  "integer"   "integer" "character" 

顺便说一句,""[0]是另一种创建长度为 0 的字符向量的方法;character()根据您的喜好,打字比打字少 7 个字符,但可读性可能较差。

于 2012-11-21T10:08:09.560 回答
8

就像添加一个空字符列一样,当data.table具有任意数量的行(包括 0)时:

DT2[ ,newcol:=character(.N) ]
于 2013-05-29T14:43:56.753 回答