【发布时间】:2021-09-23 07:52:43
【问题描述】:
通过其他一些计算,我得到了一个包含约 4500000 个条目的长向量 (vec)。现在我想计算滚动period = 1000 的第 5、25、50、75 和 95 个分位数,即我想从vec 中的第 1 个到第 1000 个元素获取这些分位数,然后是第 2 个到第 1001 个vec等中的元素
这是一些示例代码以及我将如何解决该问题:
vec <- rnorm(4500000) #create sample data
res <- matrix(nrow=length(vec), ncol=5)
period = 1000
for (i in period:length(vec)) {
res[i,] <- quantile(vec[(i-period+1):i], p=c(0.05, 0.25, 0.5, 0.75, 0.95))
}
(虽然我用rnorm创建示例数据,但我的数据不是正态分布的,标准差也不是常数!)
但是,此实现需要相当长的时间。因此,我正在寻找 R 中更省时的实现。
【问题讨论】:
-
您是在寻找精确的解决方案还是近似值也可以?
-
@user2974951 我正在寻找确切的解决方案。但是你会如何用一个近似值来做呢?
标签: r performance rolling-computation quantile processing-efficiency