dplyr::case_when
内でdplyr::mutate
を使用して、いくつかの値を欠損値に設定し、同時に他の値を再コーディングする新しい変数を作成しようとしています。
ただし、値をNA
に設定しようとすると、new
sが論理的であるため変数NA
を作成できないというエラーが表示されます。
Mutate_impl(.data、dots)のエラー:
評価エラー:論理型ではなく、double型である必要があります。
これを使用して、データフレーム内の非論理ベクトルのNA
に値を設定する方法はありますか?
library(dplyr)
# Create data
df <- data.frame(old = 1:3)
# Create new variable
df <- df %>% dplyr::mutate(new = dplyr::case_when(old == 1 ~ 5,
old == 2 ~ NA,
TRUE ~ old))
# Desired output
c(5, NA, 3)
?case_when
:
すべてのRHSは、同じタイプのベクトルに評価される必要があります。
実際には2つの可能性があります。
1)new
を数値ベクトルとして作成
df <- df %>% mutate(new = case_when(old == 1 ~ 5,
old == 2 ~ NA_real_,
TRUE ~ as.numeric(old)))
ご了承ください NA_real_
はNA
の数値バージョンです。元のデータフレームで整数として作成したため、old
を数値に変換する必要があります。
あなたが得る:
str(df)
# 'data.frame': 3 obs. of 2 variables:
# $ old: int 1 2 3
# $ new: num 5 NA 3
2)new
を整数ベクトルとして作成
df <- df %>% mutate(new = case_when(old == 1 ~ 5L,
old == 2 ~ NA_integer_,
TRUE ~ old))
ここに、 5L
は5を整数型にし、NA_integer_
は、NA
の整数バージョンです。
したがって、今回のnew
は整数です:
str(df)
# 'data.frame': 3 obs. of 2 variables:
# $ old: int 1 2 3
# $ new: int 5 NA 3
これを試して ?
df %>% dplyr::mutate(new = dplyr::case_when(.$old == 1 ~ 5,
.$old == 2 ~ NA_real_,
TRUE~.$old))
> df
old new
1 1 5
2 2 NA
3 3 3