取最后 n 个值的平均值并一次向下移动一个值

Take average of last n values and move a value down at a time

我有一个只有一列的 df (col1)

df <- data.frame(col1 = c(96, 56, 53, 63, 70, 65, 72, 
                          111, 65, 58, 59, 74, 57, 70, 
                          89, 60, 60, 52, 65, 58, 84, 
                          54, 55, 51, 72))

我想一次取 7 个值的平均值并一次向下移动一个值以获得如下所示的 table。所以 week_avg 中的每个值都是 col1

的最后 7 个值的平均值
col1   week_avg
96  
56  
53  
63  
70  
65  
72     68
111    70
65     71
58     72
59     72
74     72
57     71
70     71
89     67
60     67
60     67
52     66
65     65
58     65
84     67
54     62
55     61
51     60
72     63

使用 zoo 和 dplyr:

library(dplyr)
library(zoo)

df <- df %>% mutate(moving_average = round(rollmeanr(col1, 7, fill = NA)))


> df
   col1 moving_average
1    96             NA
2    56             NA
3    53             NA
4    63             NA
5    70             NA
6    65             NA
7    72             68
8   111             70
9    65             71
10   58             72
11   59             71
12   74             72
13   57             71
14   70             71
15   89             67
16   60             67
17   60             67
18   52             66
19   65             65
20   58             65
21   84             67
22   54             62
23   55             61
24   51             60
25   72             63