我使用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
中的类似:=
时,paste(names(mtcars),collapse=",")
中是否有捷径就像执行data.table
一样?注意:我也有大量要运行的功能。因此,我无法重复
=:
多次(但如果可以在此处应用lapply
,则我更愿意这样做)。
最佳答案
像这样使用反引号:=
...
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
关于r - 等效于data.table中的ddply(...,transform,...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19569145/