R の mutate 関数: データフレームに列を追加する
UB3/informatics/r/mutate
このページの最終更新日: 2024/09/30- 概要: mutate() 関数の基本的な使い方
- if_else: mutate() 関数で、条件を指定して列を追加する
- str_detect: 特定の文字列を含むかどうかで真偽を判別する
- str_sub: 他の列から部分抽出する
- それぞれの行の最大値の列を追加する
- 通し番号を追加する
広告
概要: mutate() 関数の基本的な使い方
R の mutate() 関数は、tidyverse パッケージ に含まれる関数である。データフレーム に列を追加する。
組み込みデータセット の ToothGrowth を使ってみよう。
基本的な使い方は、mutate(データセット, 列名 = 条件) である。
単純に一つの値を追加する場合。
既存の列を使用。len という列の 2 倍の数値をもつ列を作成。
これらの例は、分かりやすいようでいて、実はけっこう分かりにくい。df2 の例では、追加するベクターの長さが 1 であるのに対し、df3 で追加しているのは len と同じ長さ (つまり、ToothGrowth の行数と同じ長さ) をもつベクターである。
df3 の方はわかる。新しい列をデータフレームに足すのだから、行の数が同じにならなければいけない通りである。
実は
if_else: mutate() 関数で、条件を指定して列を追加する
条件指定には、if_else を使う方法が便利である。if_else(条件式, true = 真の場合の値, false = 偽の場合の値) とする。
二つの列が同一かどうかを調べるには、if_else(列1 == 列2, true = 0, false = 1) として新しい列を作成し、その列の合計値や最大値を求めればよい。
条件分岐していく場合の書き方
場合分けを重ねていく場合には、
以下の例では、まず len が 10 より大きいかを調べ、真なら Long を記入。偽の場合は、次に 8 より大きいかを調べる。ここで 10 > len > 8 と書きたくなるかもしれないが、最初の判定で 10 より小さいことはわかっているので、len > 8 のみで十分である。10 > len > 8 と指定してしまうと、スクリプトがエラーになるだけでなく、理論的に値がちょうど 10 のときに判定できなくなる。
8 より大きい場合には Middle、そうでない場合は Short となる。最後の , false = の位置が間違いやすいので注意。最後の if_else のカッコの中に入る。
str_detect: 特定の文字列を含むかどうかで真偽を判別する
特定の文字列を含むかどうかで判別するときは、str_detect と組み合わせる。以下のスクリプトで, supp が VC を含む場合は TURE、そうでない場合は FALSE という列が追加される。
str_sub: 他の列から部分抽出する
部分抽出なので、ベクターの取り扱い とも共通部分が多い。supp の列の 1 文字目を抽出している。後ろから抽出する場合はマイナスをつける。
それぞれの行の最大値の列を追加する
もちろん、これが唯一の方法ではない。rowwise() は推奨されないと書いてあるページもあった。詳細は データフレームで各行の最大値を取得する を参照のこと。
通し番号を追加する
行の数と同じ番号を指定する。
広告
References
- 【R前処理講座16】{dplyr} mutate:列の追加【tidyverse】 Link: Last access 2024/03/28.
コメント欄
サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。