6

我使用ddplyplyr 包中的以下代码:

ddply(mtcars,.(cyl),transform,freq=length(cyl))

这个的 data.table 版本是:

DT<-data.table(mtcars)

DT[,freq:=.N,by=cyl]

当我有多个如下功能时,如何扩展它?

ddply现在,我想在and上执行多个功能data.table

ddply(mtcars,.(cyl),transform,freq=length(cyl),sum=sum(mpg))

DT[,list(freq=.N,sum=sum(mpg)),by=cyl] 

但是,data.table只给了我三列 cyl、freq 和 sum。好吧,我可以这样做:

DT[,list(freq=.N,sum=sum(mpg),mpg,disp,hp,drat,wt,qsec,vs,am,gear,carb),by=cyl]

但是,我的读取数据中有大量变量,我希望它们都像ddply(...transform....). 当我们只有一个功能(如上)或类似的data.table东西时,是否有捷径?注意:我还有大量函数要运行。所以,我不能重复多次(但如果可以在这里应用,我更喜欢这个)。:=paste(names(mtcars),collapse=",")data.table=:lapply

4

2 回答 2

10

像这样使用反引号:=...

DT[ , `:=`( freq = .N , sum = sum(mpg) ) , by=cyl ]
head( DT , 3 )
#    mpg cyl disp  hp drat    wt  qsec vs am gear carb freq   sum
#1: 21.0   6  160 110 3.90 2.620 16.46  0  1    4    4    7 138.2
#2: 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4    7 138.2
#3: 22.8   4  108  93 3.85 2.320 18.61  1  1    4    1   11 293.3
于 2013-10-24T15:12:50.220 回答
2

在某些情况下也很有用:

newvars <- c("freq","sum")
DT[, `:=`(eval(newvars), list(.N,sum(mpg)))]
于 2013-10-25T18:07:39.770 回答