Dplyr を使用してグループごとのオフセットを計算する方法


dplyrパッケージを使用して、R でグループ シフトされた値を計算するには、次の構文を使用できます。

 df %>%
  group_by(var1) %>%
  mutate(lag1_value = lag(var2, n= 1 , order_by=var1))

: mutate()関数は、遅延値を含むデータ フレームに新しい変数を追加します。

次の例は、この構文を実際に使用する方法を示しています。

例: dplyrを使用してグループごとにシフトされた値を計算する

R に、異なる日に 2 つの異なる店舗で行われた売上を示す次のデータ フレームがあるとします。

 #create data frame
df <- data. frame (store=c('A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'),
                 sales=c(7, 12, 10, 9, 9, 11, 18, 23))

#view data frame
df

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

次のコードを使用して、各店舗の時間差売上高を表示する新しい列を作成できます。

 library (dplyr)

#calculate lagged sales by group
df %>%
  group_by(store) %>%
  mutate(lag1_sales = lag(sales, n= 1 , order_by=store))

# A tibble: 8 x 3
# Groups: store[2]
  store sales lag1_sales
1 to 7 NA
2 B 12 NA
3 to 10 7
4 B 9 12
5 to 9 10
6 B 11 9
7 to 18 9
8 B 23 11

結果を解釈する方法は次のとおりです。

  • 店舗 A の売上には以前の値がないため、 lag1_salesの最初の値はNAです。
  • 店舗 B の売上には以前の値がないため、 lag1_salesの 2 番目の値はNAです。
  • lag1_salesの 3 番目の値は、店舗 A の以前の売上値であるため、 7です。
  • lag1_salesの 4 番目の値は、店舗 B の以前の売上値であるため、 12です。

等々。

lag()関数のnの値を変更することで、使用されるラグの数を変更することもできることに注意してください。

追加リソース

次のチュートリアルでは、R で他の一般的な計算を実行する方法について説明します。

dplyr を使用して累計を計算する方法
Rでグループごとの合計を計算する方法
R でグループごとの平均を計算する方法

コメントを追加する

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