【发布时间】:2013-11-03 08:24:07
【问题描述】:
我使用 plyr 包中的ddply 有以下代码:
ddply(mtcars,.(cyl),transform,freq=length(cyl))
这个的data.table版本是:
DT<-data.table(mtcars)
DT[,freq:=.N,by=cyl]
当我有多个如下所示的功能时,如何扩展它?
现在,我想对ddply 和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 中是否有捷径,就像在 data.table 中只有一个函数(如上)或类似 paste(names(mtcars),collapse=",") 时执行 := 一样?
注意:我还有大量函数要运行。所以,我不能多次重复=:(但如果可以在这里应用lapply,我会更喜欢这个)。
【问题讨论】:
-
如果您只是想添加列,我相信与
ddply等效的最佳语法类似于DT[,`:=`(freq = .N, sum = sum(mpg))] -
谢谢@Blue Magister
标签: r transform data.table plyr