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

标签 r transform data.table plyr

我使用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/

相关文章:

R:在两个不同维度的数据框中添加值

在列中第一次出现 0 后删除组的后续行

css - 添加 CSS 动画会对 Chrome 中的图像渲染产生负面影响

matlab - MATLAB中的复杂倒谱变换

javascript - CSS 转换在转换为 React 代码 : 时停止运行

r - 加入两个 data.tables 后创建新列

使用日期查找将第一个匹配的行返回到日期范围查找表

r - data.table 中的列表/多列分组条件中的列名

R:考虑因素,按周计算移动最大斜率

RDSTK : Reverse geocode lat/lon to city (using coordinates2politics)