小编ewa*_*ace的帖子

带向量函数的数据表聚合,取2

我正在努力使用data.table来总结向量函数的结果,这在ddply中很容易.

问题1:使用向量输出聚合(昂贵)函数

dt <- data.table(x=1:20,y=rep(c("a","b"),each=10))
Run Code Online (Sandbox Code Playgroud)

这个ddply命令产生了我想要的东西:

ddply(dt,~y,function(dtbit) quantile(dtbit$x))
Run Code Online (Sandbox Code Playgroud)

此数据表命令不能执行我想要的操作:

dt[,quantile(x),by=list(y)]
Run Code Online (Sandbox Code Playgroud)

我可以像这样破解data.table:

dt[,list("0%"=quantile(x,0),"25%"=quantile(x,0.25),
    "50%"=quantile(x,0.5)),by=list(y)]
Run Code Online (Sandbox Code Playgroud)

但是那个冗长,如果矢量函数"分位数"很慢,也会很慢.

一个类似的例子是:

dt$z <- rep(sqrt(1:10),2)

ddply(dt,~y,function(dtbit) coef(lm(z~x,dtbit)))
Run Code Online (Sandbox Code Playgroud)

问题2:使用带矢量输入和输出的函数

xzsummary <- function(dtbit) t(summary(dtbit[,"x"]-dtbit[,"z"]))

ddply(dt,~y,xzsummary )
Run Code Online (Sandbox Code Playgroud)

我可以在data.table中轻松完成这类工作吗?

如果这些问题已得到明确回答,请道歉.

这是一个类似的,不完全相同的问题: 返回向量的data.table聚合,例如scale()

r plyr dplyr data.table

5
推荐指数
1
解决办法
265
查看次数

标签 统计

data.table ×1

dplyr ×1

plyr ×1

r ×1