P6. Mutateで新しい変数(因子型)を定義する
入力されたデータを眺めていても、解釈が難しいことがあります。
こんな時、①先行研究などで示されている「カットオフ値」を使ったり、②自分で考えた任意の基準で
グループ分けしたりすることで、解釈しやすいカテゴリ変数(例:「ハイリスク群」「ローリスク群」など)を作成できます。
この条件分岐によるグループ分けには、if_else()
とcase_when()
という関数が役立ちます。
1. 2つのグループに分ける場合:if_else()
if_else()
は、「もし条件が真ならA、偽ならB」という、2択の条件分岐に最適な関数です。
基本ルール
if_else(条件式, 真の場合の値, 偽の場合の値)
の順番で、3つの引数をカンマで区切って書きます。(例:if_else(kessler6 >= 13, 1, 0)
)if_else()
は、第1引数に入れた「条件式」を評価します。- 条件が
TRUE
なら第2引数の値を、FALSE
なら第3引数の値を返します。2択の分岐に特化した、シンプルな関数です。
使用例:K6スコアからHighリスク群を作成する
心理的苦痛のkessler6(K6)の合計得点を、有名なカットオフ値である13点を基準に、「ハイリスク群」と「ローリスク群」の2つに分けてみましょう。
naiman_c23 <- naiman_c22 %>%
mutate( k6_h = if_else(
kessler6 >= 13, 1, 0 ),
k6_hf = factor( k6_h,
levels = c(0, 1),
labels = c(“low”, “high”) ) )
(日本語訳)naiman_c22
データを元にして、全体をnaiman_c23
として保存してください。ほんでな
列を作ってください。k6_h
列は、条件みて作ってください。 kessler6
の値が13以上なら1
、13未満なら0
、欠損ならNA
を入れる。k6_hf
列は、 今作ったk6_h
列を使って、0
を"low"
に、1
を"high"
というラベルを着せてやってけろ。
※美しい書式ではないですが、ここまで(頑張って)辿ってきた初学者が知っている構成とするため、中間変数(k6_h)を作っています。
2. 3つ以上のグループに分ける場合:case_when()
case_when()
は、複数の「もし〜なら」という条件分岐を、分かりやすく書くための関数。主にmutate()
の中で使います。
「条件1ならA、条件2ならB、条件3ならC…」という、3つ以上の複雑な条件分岐で活躍します。
基本ルール
条件式 ~ 結果
のペアを上から順に書きます。(例:kessler6 >= 13 ~ 1)~
(チルダ)は、「もし左の条件が真なら、右の値を返す」という意味の特殊な記号です- 最初に
TRUE
になった条件の結果を採用して、その行のチェックを終えます。
使用例:11段階の満足度(q1_1
)から満足グループ(manzoku_group
)を作る場合:
naiman_x <- naiman_y %>%
mutate( manzoku_group = factor(
case_when( q1_1 <= 4 ~ “不満”,
q1_1 <= 7 ~ “普通”,
q1_1 >= 8 ~ “満足”,
TRUE ~ NA_character_
),
levels = c(“不満”, “普通”, “満足”) ) )
(日本語訳)naiman_y
を元にして、その結果全体をnaiman_x
として保存してください。ほんでなmanzoku_group
ちゅう新しい列を、因子型で作っといてほしいねん。
条件、大切なのから言うで。
q1_1の点数見てな、4以下は「不満」、7点以下は「普通」、8点以上は「満足」ってことにして。
最後にな、一応、「不満」「普通」「満足」の順番があるから覚えておきや!
覚えておくべきポイント
- 順番が命: 条件は上からチェックされるので、書く順番が結果に影響します。
TRUE ~ ...
は安全策: どの条件にも合わなかった「それ以外すべて」の値を処理するため、最後に書くのが定番です。if_else()
との違い: 条件が2つ(例:男/女)ならif_else()
、3つ以上ならcase_when()
を使うと、コードが綺麗になります。