[R]tibbleの別の列の値を条件に使用して指定の列の値を変更する
mutate関数とcase_when関数を組み合わせて使う。以下は、次のtibbleについてそのtibbleの別の列の値からそれぞれcv列に値を代入した例。
> library(tidyverse)
> tib %>% as.data.frame()
title no chara cv
1 ウマ娘 30 ライスシャワー NA
2 ウマ娘 45 スーパークリーク NA
3 ウマ娘 58 メイショウドトウ NA
4 ライザのアトリエ2 1 ライザ NA
5 ライザのアトリエ2 2 フィー NA
6 推しの子 6 黒川あかね NA
case_when関数には条件ごとにコンマで区切って「条件式 ~ 代入する値」と指定する。指定した順に評価されて代入される。条件に一致しないものは何もしない。
> tib %>% mutate(cv = case_when(
+ title == "ウマ娘" & chara == "ライスシャワー" ~ "石見舞菜香",
+ chara == "メイショウドトウ" | chara == "フィー" ~ "和多田美咲"
+ )) %>% as.data.frame()
title no chara cv
1 ウマ娘 30 ライスシャワー 石見舞菜香
2 ウマ娘 45 スーパークリーク
3 ウマ娘 58 メイショウドトウ 和多田美咲
4 ライザのアトリエ2 1 ライザ
5 ライザのアトリエ2 2 フィー 和多田美咲
6 推しの子 6 黒川あかね
mutate関数は存在する列を指定するとその列の値を書き換えるが、存在しない列名を指定するとその列を新たに作成する。
> tib %>% mutate(type = case_when(
+ str_detect(title, "^推し") ~ "アニメ",
+ )) %>% as.data.frame()
title no chara cv type
1 ウマ娘 30 ライスシャワー NA
2 ウマ娘 45 スーパークリーク NA
3 ウマ娘 58 メイショウドトウ NA
4 ライザのアトリエ2 1 ライザ NA
5 ライザのアトリエ2 2 フィー NA
6 推しの子 6 黒川あかね NA アニメ
case_when関数で指定した条件は、指定した順に評価されるため、最後の条件の条件式にTRUEを指定すればif文のelseに相当する動作をさせることができる。
> tib %>% mutate(type = case_when(
+ str_detect(title, "^推し") ~ "アニメ",
+ TRUE ~ "ゲーム"
+ )) %>% as.data.frame()
title no chara cv type
1 ウマ娘 30 ライスシャワー NA ゲーム
2 ウマ娘 45 スーパークリーク NA ゲーム
3 ウマ娘 58 メイショウドトウ NA ゲーム
4 ライザのアトリエ2 1 ライザ NA ゲーム
5 ライザのアトリエ2 2 フィー NA ゲーム
6 推しの子 6 黒川あかね NA アニメ
« [R]tibbleの列の順番を並び替える | トップページ | [R]正規表現を使用してファイル名を表す文字列から拡張子を抜き出す »
「R(tidyverse)」カテゴリの記事
- [R]2つの列による重複を調べてその重複の数を表示する(2025.12.24)
- [R]tibbleから指定した一列を取り出してベクトルにする(2025.10.19)
- [R]tibbleを指定した列だけのtibbleに変換する(2025.10.14)
- [R]tibbleを指定した行だけのtibbleに変換する(2025.10.13)
- [R]tibbleの列名を得る(2025.07.17)
« [R]tibbleの列の順番を並び替える | トップページ | [R]正規表現を使用してファイル名を表す文字列から拡張子を抜き出す »

コメント