Help us understand the problem. What is going on with this article?

dplyr::case_whenの使い方

Rのライブラリdplyrのcase_whenを使ってみたので、
使用例などをここにまとめておきます。

要点

  • case_whenは複数のdplyr::if_elseベクトル化したもの。
  • 左辺に条件式、右辺に置換値を記述する。
  • どの条件にも合致しなかった場合は、NAが返される。

case_whenの基礎

case_when(...)

引数

両側式のシーケンス。 左辺には条件式、右辺には置換値を指定します。
左辺にはlogical型のベクトルを渡す必要がありますが、右辺は型に指定はありません。
ただし、右辺にはすべて同じ型を渡す必要があります(dplyr::if_elseもTRUEとFALSE
の戻り値の型は一緒でなくてはなりませんので、イメージしやすいかと)。

戻り値

右辺の置換後の値。

実装例

1~10までのベクトルを用意して、奇数なら"Odd"、偶数なら"Even"と出力させます。

x <- 1:10
dplyr::case_when(
  x %% 2 == 1 ~ 'Odd',
  x %% 2 == 0 ~ 'Even'
)

# 実行結果
# [1] "Odd" "Even" "Odd" "Even" "Odd" "Even" "Odd" "Even" "Odd" "Even"

置換値に異なる型を指定した場合はエラーになります。

x <- 1:10
dplyr::case_when(
  x %% 2 == 1 ~ 'Odd',
  x %% 2 == 0 ~ 0
)
# 実行結果
# エラー: must be a character vector, not a double vector

また、条件に合致しない場合はNAを出力します。

x <- 1:10
dplyr::case_when(
  x %% 2 == 1 ~ 'Odd'
)
# 実行結果
# [1] "Odd" NA    "Odd" NA    "Odd" NA    "Odd" NA    "Odd" NA

参考

A Grammar of Data Manipulation • dplyr

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away