第5章 tidyverse(dplyr)で再現 ・ ノック 77 / 100 ・ [[000 - はじめに(使い方と目次)|目次]]<br> ← 前 [[076 - 列の並び順を変える]] ・ 次 → [[078 - 複数の列に同じ処理をする]] > [!info] case_when() は複数の条件に応じて値を振り分ける関数です > **`case_when()`**(ケースウェン)は、「もし○○なら△△、それ以外なら□□」という条件分岐を書く関数です。`mutate()` の中で使い、条件式 `~` 値の形で書きます。条件は上から順に評価され、最初に当てはまった条件の値が使われます。`TRUE ~ "小"` は「どの条件にも当てはまらない場合の既定値(デフォルト)」を意味します。 > > Rベースでは `ifelse(iris$Sepal.Length > 6, "大", "小")` と書いていました。条件が2段階なら `ifelse()` でも書けますが、3段階以上になると `case_when()` の方がすっきり書けます。 ## 問題 `iris` に `size` 列を追加し、Sepal.Length が 6 より大きければ `"大"`、それ以外は `"小"` を入れてみましょう。`Sepal.Length` と `size` の列だけを取り出し、代表的な行を確認してください。 > [!tip] ヒント > `mutate(iris, size = case_when(Sepal.Length > 6 ~ "大", TRUE ~ "小"))` の形で書きます。その後 `select()` と `slice()` で見やすく絞りましょう。 > [!success]- 回答を見る > ```r > library(dplyr) > mutate(iris, size = case_when(Sepal.Length > 6 ~ "大", TRUE ~ "小")) |> > select(Sepal.Length, size) |> > slice(c(1, 2, 51, 52)) > ``` > ``` > Sepal.Length size > 1 5.1 小 > 2 4.9 小 > 3 7.0 大 > 4 6.4 大 > ``` > Rベースでは `ifelse(iris$Sepal.Length > 6, "大", "小")` と書いていましたが、`case_when()` を使うと条件が3つ以上になっても読みやすく書けます。