如何在r中按组计算移动平均值


在时间序列分析中,移动平均线表示之前多个时期的平均值。

您可以使用以下基本语法来计算 R 中的组移动平均值:

 library (dplyr)
library (zoo)

#calculate moving average by group
df %>%
  group_by(variable1)
  mutate(moving_avg = rollmean(variable2, k= 3 , fill=NA, align=' right '))

此特定示例计算由变量 1分组的变量 2的 3 周期移动平均值。

此代码使用dplyr包中的group_by()函数和Zoo包中的rollmean()函数。

下面的例子展示了如何在实际中使用这个功能。

示例:在 R 中按组计算移动平均值

假设我们在 R 中有以下数据框,显示了两个不同商店连续几天的产品销量:

 #create data frame
df <- data. frame (store=rep(c(' A ', ' B '), each= 7 ),
                 sales=c(4, 4, 3, 5, 6, 5, 7, 4, 8, 7, 2, 5, 4, 6))

#view data frame
df

   blind sales
1 to 4
2 to 4
3 to 3
4 to 5
5 to 6
6 to 5
7 to 7
8 B 4
9 B 8
10 B 7
11 B 2
12 B 5
13 B 4
14 B 6

我们可以使用以下语法创建一个名为moving_avg3的新列,用于显示每个商店的 3 天移动平均销售额:

 library (dplyr)
library (zoo)

#calculate 3-day moving average of sales, grouped by store
df %>%
  group_by(store) %>%
  mutate(moving_avg3 = rollmean(sales, k= 3 , fill=NA, align=' right '))

# A tibble: 14 x 3
# Groups: store[2]
   store sales moving_avg3
           
 1 A 4 NA   
 2 A 4 NA   
 3 to 3 3.67
 4 to 5 4   
 5 to 6 4.67
 6 to 5 5.33
 7 to 7 6   
 8 B 4 NA   
 9 B 8 NA   
10 B 7 6.33
11 B 2 5.67
12 B 5 4.67
13 B 4 3.67
14 B 6 5

注意rollmean()函数中的k值控制用于计算移动平均值的先前周期数。

moving_avg3列显示前 3 个周期的移动平均销售额。

例如,A店前3天销售额的滚动平均值计算如下:

3日移动平均线=(4+4+3) /3=3.67

商店 A 未来 3 天销售额的移动平均值计算如下:

3日移动平均线=(4+3+5)/3= 4

等等。

请注意,每个商店的前两个移动平均值都是NA ,因为没有足够的先前时期可用于移动平均值。

其他资源

以下教程解释了如何在 R 中执行其他常见任务:

如何在 R 中绘制多列
如何在 R 中对列进行平均
如何计算R中每组的平均值

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注