gpt4 book ai didi

r - 计算加权滚动平均值 R

转载 作者:行者123 更新时间:2023-12-04 11:04:34 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Adaptive moving average - top performance in R

(3 个回答)


7年前关闭。




假设我在 dataframe/data.table 中有两列,一列是级别,另一列是卷。我想计算水平的滚动平均值,按体积加权,因此体积作为某些滚动窗口的权重(归一化为 1)。

Base R 有一个 weighted.mean() 函数,它对两个静态向量进行类似的计算。我尝试使用 sapply 将列表/向量 fo 参数传递给它并创建一个 rollign 系列,但无济于事。

我应该使用 weighted.mean() 哪种“应用”机制来获得所需的结果,或者我必须循环/编写自己的函数?

///////////////////////////////////////////////////////////////////////////////////////

附注最后我决定编写简单的自定义函数,它利用了伟大的 RccpRoll 包。我发现 RccpRoll 非常快,比其他滚动方法快得多,这对我很重要,因为我的数据有几百万行。

该函数的代码如下所示(因为 RccpRoll 返回没有 NA 的数据,所以我在开始时添加了一些 NA):

require(RcppRoll)
my.rollmean.weighted <- function(vec1,vec2,width){
return(c(rep(NA,width-1),roll_sum(vec1*vec2,width)/roll_sum(vec2,width)))
}

最佳答案

我认为这可能会奏效。它采用了 rollapply 中展示的技术。滚动回归的文档。关键是by.column=FALSE .这提供了滚动基础上所有列的矩阵。

  require(zoo)

df <- data.frame(
price = cumprod(1 + runif(1000,-0.03,0.03)) * 25,
volume = runif(1000,1e6,2e6)
)

rollapply(
df,
width = 50,
function(z){
#uncomment if you want to see the structure
#print(head(z,3))
return(
weighted_mean = weighted.mean(z[,"price"],z[,"volume"])
)
},
by.column = FALSE,
align = "right"
)

如果它不起作用或不清楚,请告诉我。

关于r - 计算加权滚动平均值 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24647075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com