r tidyverse 使い方 | 列の追加 mutate関数 – dplyrパッケージ
tidyverseでデータフレームに列を追加する場合は、dplyrパッケージのmutate関数を使います。新しい列を追加したり、既にある列に上書きすることができます。また、transmutateという関数を使った場合は、列を追加しつつ、selectのように列の選択も可能です。尚、mutateでは定義済み列は、すぐにmutate内で利用することができます。Rの標準的な操作の場合は、transform関数を使います。
目次
mutate関数 列の追加
mutate関数は、新しい列を追加します。列名と任意の式を使って列を追加します。一度に複数列の追加が可能です。tidyverseパッケージをロードすると使えるようになります。
書式
mutate関数は、第1引数にデータフレーム、第2引数以降に追加する「列名と任意の式」のセットを指定します。尚、パイプ(%>%)を使って連続的に処理を記述する場合は、第1引数のデータは省略することができます。
mutate(データフレーム, 追加列名1=式1, 追加列名2=式2...)
新しい列を追加する
mutate関数に「追加する列名」と「第1列を整数化する式」を追加しました。新しい列名を指定したので、データフレームに式の結果が列として追加されました。
1: > library(tidyverse) 2: 3: > iris %>% head 4: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 5: 1 5.1 3.5 1.4 0.2 setosa 6: 2 4.9 3.0 1.4 0.2 setosa 7: 3 4.7 3.2 1.3 0.2 setosa 8: 4 4.6 3.1 1.5 0.2 setosa 9: 5 5.0 3.6 1.4 0.2 setosa 10: 6 5.4 3.9 1.7 0.4 setosa 11: 12: > iris %>% head %>% mutate(add_column = as.integer(Sepal.Length)) 13: Sepal.Length Sepal.Width Petal.Length Petal.Width Species add_column 14: 1 5.1 3.5 1.4 0.2 setosa 5 15: 2 4.9 3.0 1.4 0.2 setosa 4 16: 3 4.7 3.2 1.3 0.2 setosa 4 17: 4 4.6 3.1 1.5 0.2 setosa 4 18: 5 5.0 3.6 1.4 0.2 setosa 5 19: 6 5.4 3.9 1.7 0.4 setosa 5
既存の列を上書きする
mutate関数に「追加する列名(既存の列名)」と「第1列を整数化する式」を追加しました。既存の列名を指定したので、データフレームの既存列に式の結果が上書きされました。
1: > iris %>% head %>% mutate(Sepal.Length = as.integer(Sepal.Length)) 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 1 5 3.5 1.4 0.2 setosa 4: 2 4 3.0 1.4 0.2 setosa 5: 3 4 3.2 1.3 0.2 setosa 6: 4 4 3.1 1.5 0.2 setosa 7: 5 5 3.6 1.4 0.2 setosa 8: 6 5 3.9 1.7 0.4 setosa
taransmute 列の追加
transmute関数は、新しい列を追加しつつ、selectのように必要な列だけの選択も可能です。列名と任意の式を使って列を追加できるのは、mutate関数と同じで、一度に複数列の追加が可能です。しかし、指定した列名だけが残ります。tidyverseパッケージをロードすると使えるようになります。
新しい列の追加と選択
transmute関数に「追加する列名(既存の列名)」と「第1列を整数化する式」を追加しました。既存の列名を指定したので、データフレームの既存列に式の結果が上書きされました。更に、変更しない第2列も指定しました。結果として、整数化された第1列と既存第2列だけのデータフレームが生成されました。
1: > iris %>% head %>% transmute(int_Sepal.Length = as.integer(Sepal.Length), Sepal.Width) 2: int_Sepal.Length Sepal.Width 3: 1 5 3.5 4: 2 4 3.0 5: 3 4 3.2 6: 4 4 3.1 7: 5 5 3.6 8: 6 5 3.9
便利な特長 定義済みの列を中間結果として使う
mutate関数・transmute関数で「追加する列名(既存の列名)」を定義すると、すぐにその内容を使えるようになります。第1列を整数化した新しい列を「int_Sepal.Length」と定義し、すぐに「int_Sepal.Length2」として「int_Sepal.Lengthを2倍した列」を定義できました。うまく活用すると、無駄な中間データの生成を防げます。
1: > iris %>% head %>% transmute(int_Sepal.Length = as.integer(Sepal.Length), int_Sepal.Length2 = int_Sepal.Length*2) 2: int_Sepal.Length int_Sepal.Length2 3: 1 5 10 4: 2 4 8 5: 3 4 8 6: 4 4 8 7: 5 5 10 8: 6 5 10
Rの標準的な操作
データフレームに新しい列の追加を行う場合、Rの標準的な方法ではtransform関数を使います。引数に、基のデータフレーム、追加する列の情報を「列」「任意の式」で記述します。追加する列は複数指定することができます。
1: > iris %>% head 2: Sepal.Length Sepal.Width Petal.Length Petal.Width Species 3: 1 5.1 3.5 1.4 0.2 setosa 4: 2 4.9 3.0 1.4 0.2 setosa 5: 3 4.7 3.2 1.3 0.2 setosa 6: 4 4.6 3.1 1.5 0.2 setosa 7: 5 5.0 3.6 1.4 0.2 setosa 8: 6 5.4 3.9 1.7 0.4 setosa 9: > 10: > iris %>% head %>% transform(int_Sepal.Length = as.integer(Sepal.Length)) 11: Sepal.Length Sepal.Width Petal.Length Petal.Width Species int_Sepal.Length 12: 1 5.1 3.5 1.4 0.2 setosa 5 13: 2 4.9 3.0 1.4 0.2 setosa 4 14: 3 4.7 3.2 1.3 0.2 setosa 4 15: 4 4.6 3.1 1.5 0.2 setosa 4 16: 5 5.0 3.6 1.4 0.2 setosa 5 17: 6 5.4 3.9 1.7 0.4 setosa 5
まとめ
- tidyverseでデータフレームに新しい列を追加する場合は、dplyrパッケージのmutate関数を使う。
- mutate関数は、新しく追加する列・列の任意の定義式で構成し、一度に複数指定できる。列名で既存名を指定すると上書きする。
- transmute関数は、新しい列を追加しつつ、必要な列だけ選ぶことができる。
- Rの標準的な操作ではtransform関数で、新しく列を追加できる。