我有一个数据框/数据表格,有两列数据,一列是水平(level),另一列是体积(volume)。我想要计算水平的滚动加权平均值,使用体积作为权重(标准化为1),应用于某个滚动窗口。
基本的R语言有一个weighted.mean()函数,可以对两个静态向量进行类似的计算。我试图使用sapply将一个参数列表/向量传递给它,并创建一个滚动系列,但没有成功。
我应该使用哪种"apply"机制与weighted.mean()一起使用才能得到所需的结果,还是我必须循环/编写自己的函数?
P.S.最后,我选择了编写简单的定制函数,利用了优秀的RccpRoll包。我发现RccpRoll非常快速,比其他滚动方法要快得多,这对我来说非常重要,因为我的数据有数百万行。
函数代码如下(我在开头添加了一些NA,因为RccpRoll返回没有NA的数据):
基本的R语言有一个weighted.mean()函数,可以对两个静态向量进行类似的计算。我试图使用sapply将一个参数列表/向量传递给它,并创建一个滚动系列,但没有成功。
我应该使用哪种"apply"机制与weighted.mean()一起使用才能得到所需的结果,还是我必须循环/编写自己的函数?
P.S.最后,我选择了编写简单的定制函数,利用了优秀的RccpRoll包。我发现RccpRoll非常快速,比其他滚动方法要快得多,这对我来说非常重要,因为我的数据有数百万行。
函数代码如下(我在开头添加了一些NA,因为RccpRoll返回没有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)))
}
RcppRoll
包的哪个函数来计算加权滚动平均值? - JulienRcppRoll::roll_mean
函数。它能像rollapply
一样处理数据框吗? - Julien