概要
dplyr
パッケージに含まれるif_else(), case_when(), recode(), recode_factor()
は、条件分岐による値を取得する関数です。主にmutate()
と併せて使用します。
関連ページ
関数
if_else(condition, true, false, missing = NULL)
case_when(...)
recode(.x, ..., .default = NULL, .missing = NULL)
recode_factor(.x, ..., .default = NULL, .missing = NULL, .ordered = FALSE)
引数 | 指定 | 説明 |
---|---|---|
condition | 必須 | if_else() で使用する条件を指定する |
true, false | 必須 | if_else() で使用するTRUE, FLASEの時の返り値を指定する |
.x | 必須 | recode(), recode_factor() で使用する条件に使用する列名を指定する |
.default | 任意 | recode(), recode_factor() で使用する条件と一致しない時の初期値を指定する |
missing .missing | 任意 | 欠損値の代替値を指定する |
.ordered | 任意 | recode(), recode_factor() で使用する順序付きfactor型にしたい場合はTRUEを指定する |
使い方
解説用データフレーム
df <- tibble(
x1 = c(1, 2, 3, 4, NA),
)
> df
# A tibble: 5 x 1
x1
<dbl>
1 1
2 2
3 3
4 4
5 NA
1.IF文
# 列x1が3未満は'a', 3以上は'b', 欠損値は'c'を列y1に格納する
mutate(df, y1 = if_else(x1 < 3, 'a', 'b', missing = 'c'))
# A tibble: 5 x 2
x1 y1
<dbl> <chr>
1 1 a
2 2 a
3 3 b
4 4 b
5 NA c
2.CASE文
# 列x1が1は'a', 2は'b', 3は'c', 欠損値は'e', それ以外は'd'を列y1に格納する
mutate(df, y1 = case_when(
x1 == 1 ~ 'a',
x1 == 2 ~ 'b',
x1 == 3 ~ 'c',
is.na(x1) ~ 'e',
TRUE ~ 'd',
))
# A tibble: 5 x 2
x1 y1
<dbl> <chr>
1 1 a
2 2 b
3 3 c
4 4 d
5 NA e
3.RECODE文
recode()
は、1から順に任意の値に置き換える関数です。
3-1.文字列型
# 列x1が1は'a', 2は'b', 3は'c', それ以外は'd', 欠損値は'e'を列y1に格納する
mutate(df, y1 = recode(x1, 'a', 'b', 'c', .default = "d", .missing = "e"))
# A tibble: 5 x 2
x1 y1
<dbl> <chr>
1 1 a
2 2 b
3 3 c
4 4 d
5 NA e
3-2.factor型
# 列x1が1は'a', 2は'b', 3は'c', それ以外は'd', 欠損値は'e'を列y1に格納する
mutate(df, y1 = recode_factor(x1, 'a', 'b', 'c', .default = "d", .missing = "e"))
# A tibble: 5 x 2
x1 y1
<dbl> <fctr>
1 1 a
2 2 b
3 3 c
4 4 d
5 NA e
3-3.順序付きfactor型
# 列x1が1は'a', 2は'b', 3は'c', それ以外は'd', 欠損値は'e'を列y1に格納する
mutate(df, y1 = recode_factor(x1, 'a', 'b', 'c', .default = "d", .missing = "e", .ordered = T))
# A tibble: 5 x 2
x1 y1
<dbl> <ord>
1 1 a
2 2 b
3 3 c
4 4 d
5 NA e