【问题标题】:Take average of last n values and move a value down at a time [duplicate]取最后n个值的平均值并一次向下移动一个值[重复]
【发布时间】:2018-06-14 07:36:20
【问题描述】:

我有一个单列 (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

【问题讨论】:

  • 无法用这些答案弄清楚,这就是我在这里问这个问题的原因。我不认为它是重复的。问候。

标签: r average moving-average


【解决方案1】:

使用 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 &lt;- df %&gt;% mutate(moving_average = rollmeanr(col1, 7, fill = NA))
猜你喜欢
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多