如何在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 中执行其他常见任务: