統計プログラムRの勉強日記

Rに関して勉強してきたことを紹介します

【R】mutate関数を一気に複数の列に適応する|mutate_at / mutate_all / mutate_if

mutate発展関数のタイトル画像

はじめに

今回はデータフレームの列を編集する関数であるmutate関数の応用編としてmutate_allmutate_atmutate_if関数を紹介したいと思います。この関数を使うことで列の編集を一気にできるようになるのでぜひこの機会に使えるようになってください。

関数の紹介

今回紹介する関数群はmutate関数を複数列に一気に適応するための関数です。それぞれの特徴は以下の通りです。

関数 特徴 使いどころ
mutate_all 全ての列を編集 列の指定が面倒な時(あまり推奨されない)
mutate_at 列名に応じて複数の列を編集 位置や名前で列が指定できる
mutate_if 列の中身に応じて複数の列を編集 列の中身で列を指定できる

図にするとこんな感じのイメージになります。

mutate発展関数の使い分けイメージ

具体例

それぞれの関数の使い方は具体例を挙げながら紹介していきたいと思います。

mutate_all

mutate_all関数はmutate関数を全ての列に適応する関数です。

library(dplyr)
data = select(iris, -Species)
mutate_all(data, .funs = ~ . * 2) # 全てのデータを2倍にする

頭10行の結果はこんな感じになります(クリックで表示)

Sepal.Length Sepal.Width Petal.Length Petal.Width
10.2 7 2.8 0.4
9.8 6 2.8 0.4
9.4 6.4 2.6 0.4
9.2 6.2 3 0.4
10 7.2 2.8 0.4
10.8 7.8 3.4 0.8
9.2 6.8 2.8 0.6
10 6.8 3 0.4
8.8 5.8 2.8 0.4
9.8 6.2 3 0.2

mutate_at

mutate_at関数は列名や列の位置で指定した複数の列にmutate関数を適応する関数です。

library(dplyr)
data = iris
mutate_at(data, .vars = vars(starts_with("Petal")), .funs = ~ . * 2)

結果はこんな感じになります(クリックで表示)

Sepal.Length Sepal.Width Petal.Length Petal.Width Species
10.2 7 1.4 0.2 setosa
9.8 6 1.4 0.2 setosa
9.4 6.4 1.3 0.2 setosa
9.2 6.2 1.5 0.2 setosa
10 7.2 1.4 0.2 setosa
10.8 7.8 1.7 0.4 setosa
9.2 6.8 1.4 0.3 setosa
10 6.8 1.5 0.2 setosa
8.8 5.8 1.4 0.2 setosa
9.8 6.2 1.5 0.1 setosa

mutate_if

mutate_if関数は列の内容で指定した複数の列にmutate関数を適応する関数です。

library(dplyr)
data = iris
mutate_if(data, .predicate = is.numeric, .funs = ~ .* 2)

結果はこんな感じになります(クリックで表示)

Sepal.Length Sepal.Width Petal.Length Petal.Width Species
10.2 7 2.8 0.4 setosa
9.8 6 2.8 0.4 setosa
9.4 6.4 2.6 0.4 setosa
9.2 6.2 3 0.4 setosa
10 7.2 2.8 0.4 setosa
10.8 7.8 3.4 0.8 setosa
9.2 6.8 2.8 0.6 setosa
10 6.8 3 0.4 setosa
8.8 5.8 2.8 0.4 setosa
9.8 6.2 3 0.2 setosa

まとめ

今回はmutate関数の応用版となる関数を紹介しました。複数の列を一気に編集する時はぜひ参考にしてください。