はじめに
今回はデータフレームの列を編集する関数であるmutate
関数の応用編としてmutate_all
、mutate_at
、mutate_if
関数を紹介したいと思います。この関数を使うことで列の編集を一気にできるようになるのでぜひこの機会に使えるようになってください。
関数の紹介
今回紹介する関数群はmutate
関数を複数列に一気に適応するための関数です。それぞれの特徴は以下の通りです。
関数 | 特徴 | 使いどころ |
---|---|---|
mutate_all |
全ての列を編集 | 列の指定が面倒な時(あまり推奨されない) |
mutate_at |
列名に応じて複数の列を編集 | 位置や名前で列が指定できる時 |
mutate_if |
列の中身に応じて複数の列を編集 | 列の中身で列を指定できる時 |
図にするとこんな感じのイメージになります。
具体例
それぞれの関数の使い方は具体例を挙げながら紹介していきたいと思います。
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
関数の応用版となる関数を紹介しました。複数の列を一気に編集する時はぜひ参考にしてください。