Avoiding type conflicts with dplyr::case_when

Viewed 56502

I am trying to use dplyr::case_when within dplyr::mutate to create a new variable where I set some values to missing and recode other values simultaneously.

However, if I try to set values to NA, I get an error saying that we cannot create the variable new because NAs are logical:

Error in mutate_impl(.data, dots) :
Evaluation error: must be type double, not logical.

Is there a way to set values to NA in a non-logical vector in a data frame using this?

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)
2 Answers
Related