web-dev-qa-db-ja.com

Rの空のdata.tableに列を追加する

新しい列を既存の空の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)

警告なしで新しい列を追加する方法はありますか?

25
user1841430

良い質問。長さ1の文字ベクトル(_""_)ではなく、空の文字ベクトル(character())を割り当てます。

_> 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の文字ベクトルを作成するもう1つの方法です。好みによっては、character()よりも入力が7文字少なくなりますが、読みにくくなる可能性があります。

33
Matt Dowle

空の文字列を追加する方法の追加として、data.tableには任意の行数(0を含む)があります。

DT2[ ,newcol:=character(.N) ]
8
Beasterfield