library(dplyr)dplyr
パッケージの概要
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