我是 data.tables 的新手,如果这是一个非常基本的问题,我深表歉意。
我听说 data.tables 在处理大量数据时显着提高了计算时间,因此想看看 data.table 是否能够帮助加快 rollapply 功能。
如果我们有一些单变量数据
xts.obj <- xts(rnorm(1e6), order.by=as.POSIXct(Sys.time()-1e6:1), tz="GMT")
colnames(xts.obj) <- "rtns"
宽度为 100 且 ap 为 0.75 的简单滚动分位数需要非常长的时间...
即代码行
xts.obj$quant.75 <- rollapply(xts.obj$rtns,width=100, FUN='quantile', p=0.75)
似乎需要永远...
data.table 有什么可以加快速度的吗?即是否有可以应用的通用滚动功能?
也许是将 xts 对象转换为 data.table 对象以加速执行功能然后在最后重新转换回 xts 的例程?
提前致谢
hlm
ps 我似乎没有在 data.table 邮件列表上得到太多回复,所以我在这里发帖,看看我是否能得到更好的回复。
pps 快速了解另一个使用数据帧的示例,data.table 解决方案似乎比 rollapply 函数花费的时间更长,即如下所示:
> x <- data.frame(x=rnorm(10000))
> x.dt <- data.table(x)
> system.time(l1 <- as.numeric(rollapply(x,width=10,FUN=quantile,p=0.75)))
user system elapsed
2.69 0.00 2.68
> system.time(l <- as.numeric(unlist(x.dt[,lapply(1:((nrow(x.dt))-10+1), function(i){ x.dt[i:(i+10-1),quantile(x,p=0.75)]})])))
user system elapsed
11.22 0.00 11.51
> identical(l,l1)
[1] TRUE