2012-11-21 19 views
19

Zum Hinzufügen einer neuen Spalte zu einem vorhandenen leeren data.table (Version 1.8.6) scheint es keine Möglichkeit zu geben, dies ohne Warnung zu tun.Spalte in leere data.table hinzufügen in R

Beispiel:

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

Diese die Warnung erzeugt:

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

Gibt es einen Weg, um eine neue Spalte ohne Warnungen hinzufügen?

+13

Vergessen Sie nicht eine Antwort bitte zu akzeptieren. –

Antwort

25

Gute Frage. Weisen Sie einen leeren Zeichenvektor (character()) anstelle eines Zeichenvektors der Länge 1 ("") zu.

> 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" 

BTW, ""[0] andere Möglichkeit, ein 0 LÄNGE Zeichenvektor zu erzeugen; 7 Zeichen weniger tippen als character() aber möglicherweise weniger lesbar, je nach Vorliebe.

5

nur als Ergänzung, wie eine leere Zeichenspalte hinzuzufügen, wenn die data.table eine beliebige Anzahl von Zeilen (einschließlich 0) hat:

DT2[ ,newcol:=character(.N) ] 
Verwandte Themen