如果两个月的窗口长度不相等,我如何计算两个月的滚动平均值?最好在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,依此类推。根据意图,每个月的数据可用性可以是不同的长度。
答案 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;
}