0
我有两个向量。每天我想添加一行,使数据集一行更大:移动平均函数问题
day1 <- c(0,0,8,10,4,5,3,5,6,10,7,11,9,7,10,13,8,7,5,4)
day2 <- c(0,0,8,10,4,5,3,5,6,10,7,11,9,7,10,13,8,7,5,4,0)
我有两个函数分别充当累计平均值和滚动平均值。这两个给出平均用1
cumroll <- function(x) {
if(length(x)<=1) {x}
else {
x <- head(x, -1)
c(head(x,1), cumsum(x)/seq_along(x))
}
}
rollmean <- function(x, n) {if (length(x) <= n) cumroll(x) else rollapply(x,list(-seq(n)), mean, fill = cumroll(x))}
我期待使用此代码做20对两个数据集的滚动平均值滞后:
day1_avg <- ave(day1, FUN = function(x) rollmean(x, 20))
day2_avg <- ave(day2, FUN = function(x) rollmean(x, 20))
当我运行day1_avg它作为我由于只有20个观察结果,因此可以期望,由于累计行动。但是,当我用21个观测值运行day2_avg时,第21次观测前的每个值都会自动给出0而不是累计值。
结果低于我的期望输出day2_avg:
day2 day1_avg day2_avg DESIRED
0 0 0 0
0 0 0 0
8 0 0 0
10 2.666667 0 2.666667
4 4.5 0 4.5
5 4.4 0 4.4
3 4.5 0 4.5
5 4.285714 0 4.285714
6 4.375 0 4.375
10 4.555556 0 4.555556
7 5.1 0 5.1
11 5.272727 0 5.272727
9 5.75 0 5.75
7 6 0 6
10 6.071429 0 6.071429
13 6.333333 0 6.333333
8 6.75 0 6.75
7 6.823529 0 6.823529
5 6.833333 0 6.833333
4 6.736842 0 6.736842
0 6.6 6.6
我需要以某种方式修改的功能,以确保cumroll值保持不变的rollmean踢的第n观察后
。任何帮助将非常感激!