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()を使うと、コードが綺麗になります。

