gpt4 book ai didi

r - 等效于data.table中的ddply(...,transform,...)

转载 作者:行者123 更新时间:2023-12-04 13:40:08 25 4
gpt4 key购买 nike

我使用plyr包中的ddply使用以下代码:

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

这个的data.table版本是:
DT<-data.table(mtcars)

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

当我有多个功能(如以下功能)时,如何扩展此功能?

现在,我想对 ddplydata.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com