dplyr

Author

データサイエンス関連基礎調査WG

Published

August 1, 2025

パッケージの概要

dplyrパッケージは、データフレームに対する「特定の行・列の抽出」や「ソート」などの重要な操作を、とてもシンプルなコードで実現するための関数を備えています。規模の大きなデータを扱うことの多いアクチュアリーにとって、必要不可欠なパッケージの一つです。

library(dplyr)

パイプ演算子でコードを簡略化する

dplyrパッケージを呼び出すと、magrittrパッケージが提供するパイプ演算子(%>%)も使えるようになります。この演算子は、左側にあるオブジェクトを、右側の関数の未指定の引数のうち一番最初のものに代入した結果を返します。

# irisデータの先頭3行を表示
iris  %>% slice_head(n = 3)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa

なお、バージョン 4.1.0 以降の R には、標準演算子の一つとしてパイプ演算子 “|>” が追加されています。

# バージョン 4.1.0 以降でのみ利用可能
iris |> slice_tail(n = 3)
  Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
1          6.5         3.0          5.2         2.0 virginica
2          6.2         3.4          5.4         2.3 virginica
3          5.9         3.0          5.1         1.8 virginica

データフレームに対して多くの操作を重ねたいとき、パイプ演算子を活用すれば、多重括弧による入れ子構造を避けて可読性の高いコードを書くことができます。

iris %>%
  select(Species, Sepal.Length, Sepal.Width) %>%
  mutate(Sepal.Ratio = round(Sepal.Length / Sepal.Width, 3)) %>%
  group_by(Species) %>%
  arrange(Sepal.Ratio) %>%
  slice_head()
# A tibble: 3 × 4
# Groups:   Species [3]
  Species    Sepal.Length Sepal.Width Sepal.Ratio
  <fct>             <dbl>       <dbl>       <dbl>
1 setosa              5.2         4.1        1.27
2 versicolor          6           3.4        1.76
3 virginica           6.2         3.4        1.82

データフレームから指定した列を抽出する

iris %>%
  select(Species, Sepal.Width, Petal.Width) %>%
  slice_tail(n=3)
    Species Sepal.Width Petal.Width
1 virginica         3.0         2.0
2 virginica         3.4         2.3
3 virginica         3.0         1.8

データフレームから条件を満たす行を抽出する

iris %>%
  filter(Sepal.Width == 2.8, Petal.Width == 1.3)
  Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1          5.7         2.8          4.5         1.3 versicolor
2          6.1         2.8          4.0         1.3 versicolor
3          5.7         2.8          4.1         1.3 versicolor

データフレームの行をソートする

iris %>%
  arrange(Sepal.Length, Sepal.Width) %>% slice_head(n=3)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          4.3         3.0          1.1         0.1  setosa
2          4.4         2.9          1.4         0.2  setosa
3          4.4         3.0          1.3         0.2  setosa

データフレームの列を作成する

iris %>%
  mutate(Sepal.Ratio=round(Sepal.Length / Sepal.Width, 3)) %>%
  slice_head(n=3)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Ratio
1          5.1         3.5          1.4         0.2  setosa       1.457
2          4.9         3.0          1.4         0.2  setosa       1.633
3          4.7         3.2          1.3         0.2  setosa       1.469

データを要約する

iris %>% summarize(n_distinct(Sepal.Length),
                   mean(Sepal.Length),
                   max(Sepal.Length),
                   sum(log(Sepal.Width)))
  n_distinct(Sepal.Length) mean(Sepal.Length) max(Sepal.Length)
1                       35           5.843333               7.9
  sum(log(Sepal.Width))
1              166.1159

データフレームをグループ化して集計する

iris %>%
  group_by(Species) %>%
  summarize(n(), mean(Sepal.Length), sd(Sepal.Length))
# A tibble: 3 × 4
  Species    `n()` `mean(Sepal.Length)` `sd(Sepal.Length)`
  <fct>      <int>                <dbl>              <dbl>
1 setosa        50                 5.01              0.352
2 versicolor    50                 5.94              0.516
3 virginica     50                 6.59              0.636