potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

R&tidyverse tibbleに条件分岐で列を追加する

Rとtidyverse 1.3.1でtibbleに条件分岐で列を追加するサンプルコードです。case_when%>% case_when(条件式~値, ...)の形式で条件を満たす値を返します。最後のTRUE~NA_real_はどの条件にも一致しない要素の値を指定しています。NA_real_NAではないのはcase_whenは右辺値(「~」の右側)の型統一を求めるためです。

library(tidyverse) #tidyverse 1.3.1

data <- tibble(A=c(1:5, 11:15, 21:25, 100))

#列名が直書きできる場合
data %>% mutate(B=case_when(
   1 <= A & A <=  5~1,
  11 <= A & A <= 15~2,
  21 <= A & A <= 25~3,
  TRUE~NA_real_))

#列名が直書きできない場合(日本語など)
data %>% mutate(B=case_when(
   1 <= .$"A" & .$"A" <=  5~1,
  11 <= .$"A" & .$"A" <= 15~2,
  21 <= .$"A" & .$"A" <= 25~3,
  TRUE~NA_real_))