前後の値の参照

概要

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
Sponsored Link