我正在努力使用 data.table 来总结向量函数的结果,这在 ddply 中很容易。
问题 1:使用带有向量输出的(昂贵的)函数进行聚合
dt <- data.table(x=1:20,y=rep(c("a","b"),each=10))
这个 ddply 命令产生我想要的结果:
ddply(dt,~y,function(dtbit) quantile(dtbit$x))
此数据表命令没有执行我想要的操作:
dt[,quantile(x),by=list(y)]
我可以像这样破解 data.table :
dt[,list("0%"=quantile(x,0),"25%"=quantile(x,0.25),
"50%"=quantile(x,0.5)),by=list(y)]
但是,如果向量函数“分位数”很慢,那么冗长而且也会很慢。
类似的例子是:
dt$z <- rep(sqrt(1:10),2)
ddply(dt,~y,function(dtbit) coef(lm(z~x,dtbit)))
问题 2:使用具有向量输入和输出的函数
xzsummary <- function(dtbit) t(summary(dtbit[,"x"]-dtbit[,"z"]))
ddply(dt,~y,xzsummary )
我可以在 data.table 中轻松完成此类操作吗?
如果这些问题已经得到明确回答,我们深表歉意。
这是一个类似但不相同的问题:返回向量的 data.table 聚合,例如scale()