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 で他の一般的なタスクを実行する方法について説明します。

R で複数の列をプロットする方法
R で列の平均を計算する方法
R でグループごとの平均を計算する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です