取最后 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
我有一个只有一列的 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
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