2012-12-18 43 views
11

多列是否有可能在同一个语句更新data.table超过1列?更新的data.table

喜欢的东西

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

我见过一些例子,他们做

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

,但我不知道如何不同的公式分配给每一列

回答

9

是的,这

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 
:自1.8.4版本已经可以

或者,做同样的事情在一个更可读的方式:

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 

搜索the current data.table NEWS file为“多LHS”看,这也将与by=参数工作。

+0

FWIW,在'?“:=”'帮助页是有点过时它什么可以用'做说明:='。它的“实施例”部分不包括这里所示的语法的例子,和“参数”部分意味着这仅适用时与'= FALSE'。 –