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

参考

※Kessler6の質問紙は島根HPが見やすい。
参考論文1 参考論文2はこちら