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関数で、新しく列を追加できる。



ピックアップ記事

  1. awk for 繰り返し処理 簡単なサンプルでわかる インクリメント・デクリメント、変わった繰り返し

    awkのfor文は、カウンタを目印にして処理を繰り返したいときによく使われます。for文では、カウ…
  2. awk if サンプルでわかる条件文の書き方 一致・大小比較・正規表現を簡潔に書く方法

    awkのif条件文は、条件によって処理をわけたいときに使います。条件式では、0の判定・関係演算子・…
  3. R 使い方 グラフの色 自作のカラーパレットとデフォルトのカラーパレット

    グラフを描画する際、色の組み合わせを1つ1つ考えるのは面倒ですよね。Rには、あらかじめ色の組み合わ…

人気記事

  1. Excel, その他, 統計

    z-score 計算方法 エクセル(Excel) 編
    統計処理で、大きく変化しているなどの判断基準にも使われる値…
  2. R データ型 - 文字列・ベクター・データフレーム・マトリックス など-, R言語, スクリプト

    R subset関数 データフレームやmatrixからの条件指定による行・列の抽出
    R の subset関数は、データフレームやマトリックスか…
  3. IGV, 解析ツール

    IGV 使い方 インストール〜便利な使い方まで | リファレンス・マッピングデータ・アノテーションを読み込んで表示しよう
    IGV(Integrative Genomics View…

おすすめ記事

  1. R言語, グラフ

    R 使い方 軸・ラベルの調整(向き・サイズ・色など) グラフの描き方
    Rによるplot(グラフ)の描画は、手軽で大変便利です。た…
  2. bash 応用, シェルスクリプト

    シェル スクリプト ファイル存在チェック・空のファイルチェック
    bashでスクリプトを作成するときに、よく使うのがファイル…
  3. awk, bash 文字列操作, シェルスクリプト

    bash 部分文字列・置換・長さ・連結・分割の文字列処理
    bashのよく使う文字列処理、部分文字列・置換・連結・長さ…