第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つ以上になっても読みやすく書けます。