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

时间:2018-01-04 14:37:47

标签: r average moving-average

我有一个带有单列(col1)的df

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个值的平均值,并一次向下移动一个值,得到如下表格。因此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

1 个答案:

答案 0 :(得分:2)

使用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