2012-11-21 16 views
19

Per l'aggiunta di una nuova colonna a un vuoto data.table (versione 1.8.6) esistente non sembra esserci alcun modo per farlo senza essere avvertiti.Aggiungi colonna vuota data.table in R

Esempio:

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

Questo produce l'avvertimento:

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

C'è un modo per aggiungere una nuova colonna senza avvisi?

+13

Non dimenticare di accettare una risposta per favore. –

risposta

25

Buona domanda. Assegnare un vettore di carattere vuoto (character()) anziché un vettore di lunghezza 1 carattere ("").

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

proposito, ""[0] è un altro modo per creare un vettore di carattere 0 lunghezza; 7 caratteri meno digitati rispetto a character() ma forse meno leggibili, a seconda delle preferenze.

5

Proprio come aggiunta come aggiungere una colonna carattere vuoto, quando il data.table ha un numero arbitrario di file (tra cui 0):

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