« [R]tibbleの列の順番を並び替える | トップページ | [R]正規表現を使用してファイル名を表す文字列から拡張子を抜き出す »

2024年2月 3日 (土)

[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]tibbleの列の順番を並び替える | トップページ | [R]正規表現を使用してファイル名を表す文字列から拡張子を抜き出す »

無料ブログはココログ

■■

■■■