【发布时间】:2014-07-09 06:51:40
【问题描述】:
假设我在 dataframe/data.table 中有两列,一列是级别,另一列是卷。我想计算级别的滚动平均值,按体积加权,因此体积充当某些滚动窗口的权重(归一化为 1)。
Base R 有一个 weighted.mean() 函数,它对两个静态向量进行类似的计算。我尝试使用 sapply 将列表/向量 fo 参数传递给它并创建一个 rollign 系列,但无济于事。
我应该与 weighted.mean() 一起使用哪种“应用”机制来获得所需的结果,或者我必须循环/编写自己的函数?
/////////////////////////////////////// //////////////////////////////////////////
附:最后我决定编写简单的自定义函数,它利用了伟大的 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)))
}
【问题讨论】:
-
看看
rollapply?是否适合您的需求 -
rollapply 是 Zoo 的一部分,它是否适用于非 Zoo 对象?它似乎使用 rollapply 的一个版本,我必须将所有内容都转换为 zoo,然后再返回。以及如何滚动使用两个向量作为输入的函数的问题仍然是开放的 - 默认情况下,rollaplly 只使用一个输入,还是我错了?
-
你看过包裹
RcppRoll吗? -
不,谢谢,我去看看。
标签: r