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觀察後
。任何幫助將非常感激!