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 '))
この特定の例では、 variable1でグループ化されたvariable2の 3 期間の移動平均を計算します。
このコードは、 dplyrパッケージのgroup_by()関数と、 zooパッケージのrollmean()関数を使用します。
次の例は、この関数を実際に使用する方法を示しています。
例: R のグループごとの移動平均を計算する
R に、2 つの異なる店舗での連続日の製品の売上を示す次のデータ フレームがあるとします。
#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
次の構文を使用して、各店舗の 3 日間の移動平均売上高を表示するmove_avg3という新しい列を作成できます。
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の値は、移動平均の計算に使用される前の期間の数を制御します。
move_avg3列には、過去 3 期間の移動平均売上高が表示されます。
たとえば、店舗 A の最初の 3 日間の売上の移動平均は次のように計算されます。
3 日移動平均 = (4 + 4 + 3) / 3 = 3.67
店舗 A の今後 3 日間の売上の移動平均は、次のように計算されます。
3 日移動平均 = (4 + 3 + 5) / 3 = 4
等々。
移動平均に使用するのに十分な前の期間がないため、各ストアの最初の 2 つの移動平均値はNAであることに注意してください。
追加リソース
次のチュートリアルでは、R で他の一般的なタスクを実行する方法について説明します。