mutate()の概要
mutate()は、列の作成、変更、削除するための関数です。mutate()は、既存の変数の関数である新しい列を作成します。また、名前が既存の列と同じ場合は列を変更したり 、値をNULLに設定することで列を削除したりすることもできます。
mutate()の使い方
dplyr::mutate()の使い方は次になります。
mutate(
.data,
...,
.by = NULL,
.keep = c("all", "used", "unused", "none"),
.before = NULL,
.after = NULL
)
mutate()の引数の意味
データフレームまたはデータフレーム拡張(例:tibble)、遅延データフレーム(例:dbplyrまたはdtplyrから)を指定します。
列名と値のペアを指定します。
値によって、次のように動作します。
- 値が1つのみのときには、すべての行でその値となります
- 値がベクトルかつデータフレームの行数と等しいときには、その値となります
- 値がNULLのときには、指定した列を削除します
- 値がデータフレームまたはtibbleのときには、複数の列として展開されます
実験的な引数です。
オプションで、この操作のみでグループ化する列の選択を指定します。
group_by()の代替として機能します。詳細と例については、?dplyr_byを参照してください。
.dataのどの列を出力に保持するかを制御します。
グループ化列と…によって作成された列は常に保持されます。
- all(デフォルト): .data のすべての列を保持します。
- used: …で新しい列を作成するために使用された列のみを保持します。これは入力と出力を並べて表示するため、作業を確認するのに便利です。
- unused: … で新しい列を作成するために使用されていない列のみを保持します。これは新しい列を生成したが、その生成に使用された列が不要になった場合に便利です。
- none: .dataから余分な列を保持しません。グループ化変数と…によって作成された列のみが保持されます。
オプションで、新しい列が表示される場所を制御します (デフォルトでは右側に追加されます)。
詳細についてはrelocate()を参照してください。
オプションで、新しい列が表示される場所を制御します (デフォルトでは右側に追加されます)。
詳細についてはrelocate()を参照してください。
準備
あらかじめ、tidyverseパッケージを読み込んでおきます。
library(tidyverse)
解説のために、次のirisデータセットを使用します。
iris |>
head()
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 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
列の追加
irisデータセットで、列Sepal.Lengthを標準化した列normalized_Sepal.Lengthを追加するには次のようにします。
iris |>
mutate(normalized_Sepal.Length = scale(Sepal.Length)) |>
head()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species normalized_Sepal.Length
1 5.1 3.5 1.4 0.2 setosa -0.8976739
2 4.9 3.0 1.4 0.2 setosa -1.1392005
3 4.7 3.2 1.3 0.2 setosa -1.3807271
4 4.6 3.1 1.5 0.2 setosa -1.5014904
5 5.0 3.6 1.4 0.2 setosa -1.0184372
6 5.4 3.9 1.7 0.4 setosa -0.5353840
irisデータセットで、列Sepal.Lengthを標準化した列normalized_Sepal.Lengthと列Sepal.Widthを標準化した列normalized_Sepal.Widthを追加するには次のようにします。mutate()の引数には列名と値のペアを「,」区切りで複数記載することができます。
iris |>
mutate(normalized_Sepal.Length = scale(Sepal.Length),
normalized_Sepal.Width = scale(Sepal.Width)) |>
head()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species normalized_Sepal.Length normalized_Sepal.Width
1 5.1 3.5 1.4 0.2 setosa -0.8976739 1.01560199
2 4.9 3.0 1.4 0.2 setosa -1.1392005 -0.13153881
3 4.7 3.2 1.3 0.2 setosa -1.3807271 0.32731751
4 4.6 3.1 1.5 0.2 setosa -1.5014904 0.09788935
5 5.0 3.6 1.4 0.2 setosa -1.0184372 1.24503015
6 5.4 3.9 1.7 0.4 setosa -0.5353840 1.93331463
列の変更
irisデータセットで、列Sepal.Lengthを標準化した値に変更するには次のようにします。
iris |>
mutate(Sepal.Length = scale(Sepal.Length)) |>
head()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 -0.8976739 3.5 1.4 0.2 setosa
2 -1.1392005 3.0 1.4 0.2 setosa
3 -1.3807271 3.2 1.3 0.2 setosa
4 -1.5014904 3.1 1.5 0.2 setosa
5 -1.0184372 3.6 1.4 0.2 setosa
6 -0.5353840 3.9 1.7 0.4 setosa
irisデータセットで、列Sepal.Lengthと列Sepal.Widthを同時に標準化するには次のようにします。mutate()の引数には列名と値のペアを「,」区切りで複数記載することができます。
iris |>
mutate(Sepal.Length = scale(Sepal.Length),
Sepal.Width = scale(Sepal.Width)) |>
head()
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 -0.8976739 1.01560199 1.4 0.2 setosa
2 -1.1392005 -0.13153881 1.4 0.2 setosa
3 -1.3807271 0.32731751 1.3 0.2 setosa
4 -1.5014904 0.09788935 1.5 0.2 setosa
5 -1.0184372 1.24503015 1.4 0.2 setosa
6 -0.5353840 1.93331463 1.7 0.4 setosa
列の削除
irisデータセットで、列Speciesを削除するには次のようにします。
iris |>
mutate(Species = NULL) |>
head()
Sepal.Length Sepal.Width Petal.Length Petal.Width
1 5.1 3.5 1.4 0.2
2 4.9 3.0 1.4 0.2
3 4.7 3.2 1.3 0.2
4 4.6 3.1 1.5 0.2
5 5.0 3.6 1.4 0.2
6 5.4 3.9 1.7 0.4
irisデータセットで、列Petal.Widthと列Speciesを削除するには次のようにします。mutate()の引数には列名と値のペアを「,」区切りで複数記載することができます。
iris |>
mutate(Petal.Width = NULL,
Species = NULL) |>
head()
Sepal.Length Sepal.Width Petal.Length
1 5.1 3.5 1.4
2 4.9 3.0 1.4
3 4.7 3.2 1.3
4 4.6 3.1 1.5
5 5.0 3.6 1.4
6 5.4 3.9 1.7