2012-12-18 2 views
11

E 'possibile aggiornare più di 1 colonna di un data.table nella stessa istruzione?Aggiornare più di una colonna di un data.table

Qualcosa di simile

dt[,onecol:=1 anothercol:=2] 

Ho visto alcuni esempi in cui lo fanno

dt[,c("onecol","anothercol"):=1] 

ma non so come assegnare formule diverse per ogni colonna

risposta

9

Sì, questo è stato possibile dalla versione 1.8.4:

library(data.table) 
dt <- data.table(a=1:4, b=4:1) 
dt[,c("a", "b") := list(min(a), max(b))] 
# dt 
# a b 
# 1: 1 4 
# 2: 1 4 
# 3: 1 4 
# 4: 1 4 

Oppure, fare la stessa cosa in un modo più leggibile:

dt <- data.table(a=1:4, b=4:1) 
dt[,`:=`(a = min(a), 
     b = max(a))] 
dt 
# a b 
# 1: 1 4 
# 2: 1 4 
# 3: 1 4 
# 4: 1 4 

Cerca the current data.table NEWS file per "LHS multiple" per vedere che questo funziona anche con un argomento by=.

+0

FWIW, la '?": = "Pagina di aiuto è un po 'obsoleta nella descrizione di cosa può essere fatto con': = '. La sua sezione "Esempi" non include esempi della sintassi mostrata qui, e la sezione "Argomenti" implica che questo funziona solo quando 'con = FALSE'. –