概要
dplyr
パッケージに含まれるlead()
とlag()
は、ベクトルの前後の値を参照する関数です。主にmutate()
と併せて使用します。
関連ページ
関数
lead(x, n = 1L, default = NA, order_by = NULL, ...)
lag(x, n = 1L, default = NA, order_by = NULL, ...)
引数 | 指定 | 説明 |
---|---|---|
x | 必須 | 列名(ベクトル) |
n | 任意 | 値を取得する行とのズレを指定する |
default | 任意 | 存在しない値の初期値を指定する |
order_by | 任意 | 順序を表す列を指定する |
使い方
解説用データフレーム
df <- tibble::tibble(
x1 = c(2, 1, 3),
)
> df
# A tibble: 3 x 1
x1
<dbl>
1 2
2 1
3 3
1.前後の値を取得する
以下のコードは、1行下の値を取得する具体例です。1行上の値を取得したい場合は lead()
の代わりに lag()
を使用します。
1-1.1行下の値
# 1行下の値を取得する
mutate(df, x2 = lead(x1))
# A tibble: 3 x 2
x1 x2
<dbl> <dbl>
1 2 1
2 1 3
3 3 NA
1-2.n行下の値
# 2行下の値を取得する
mutate(df, x2 = lead(x1, n = 2))
# A tibble: 3 x 2
x1 x2
<dbl> <dbl>
1 2 3
2 1 NA
3 3 NA
2.行の並べ替え
2-1.行を並べ替える
# 列x1で並べ替えを行い、1行下の値を取得する
arrange(df, x1) %>%
mutate(x2 = lead(x1))
# A tibble: 3 x 2
x1 x2
<dbl> <dbl>
1 1 2
2 2 3
3 3 NA
2-2.行を並べ替えない
# 列x1の順序を基準にして、1行下の値を取得する
mutate(df, x2 = lead(x1, order_by = x1))
# A tibble: 3 x 2
x1 x2
<dbl> <dbl>
1 2 3
2 1 2
3 3 NA
3.初期値を指定する
# 値が存在しない場合は0を代入する
mutate(df, lead = lead(x1, default = 0))
# A tibble: 3 x 2
x1 x2
<dbl> <dbl>
1 2 1
2 1 3
3 3 0