不同窗口长度的滚动平均值

时间:2018-04-23 12:49:38

标签: r data.table

如果两个月的窗口长度不相等,我如何计算两个月的滚动平均值?最好在datatable。示例代码:

set.seed(24)
test <- data.table(x = rnorm(762),time=seq(as.Date("1988/03/15"), as.Date("1990/04/15"), "day"))

所以在这里,第一个意思是从1988/03/15到1988/04/30,第二个意思是从1988/04/01到1988/05/31,依此类推。根据意图,每个月的数据可用性可以是不同的长度。

2 个答案:

答案 0 :(得分:2)

添加yearmon列,然后按x汇总yearmon的总和和长度。
最后将x上的滚动总和除以N长度的滚动总和。

library(data.table)
library(zoo)

Means <- test[, yearmon := as.yearmon(time)][
   , list(x = sum(x), N = .N), by = "yearmon"][
   , list(yearmon, mean = rollsumr(x, 2, fill = NA) / rollsumr(N, 2, fill = NA))]

交替地将test转换为动物园对象,求和x和长度除以年,计算x和n的滚动总和,并给动物园对象分配年/月和均值。如果您想将其转换为数据框,请参阅?fortify.zoo

z <- cbind(x = read.zoo(test, index = "time"), n = 1)
zym <- aggregate(z, as.yearmon, sum)
transform(rollsumr(zym, 2), mean = x / n)

注意

使用的输入是:

set.seed(24)
test <- data.table(x = rnorm(762), time=seq(as.Date("1988/03/15"), 
                          as.Date("1990/04/15"), "day"))

答案 1 :(得分:0)

.ccpc-product-details-container{
    background-color: white;
    border-radius: 0 0 55px 55px;
    height: 100px;
    overflow: auto;

}