Using dplyr to conditionally replace values in a column
In dplyr
and tidyr
dat %>%
mutate(var = replace(var, var != "Candy", "Not Candy"))
Significantly faster than the ifelse
approaches.
Code to create the initial dataframe can be as below:
library(dplyr)
dat <- as_data_frame(c("Candy","Sanitizer","Candy","Water","Cake","Candy","Ice Cream","Gum","Candy","Coffee"))
colnames(dat) <- "var"
Assuming your data frame is dat
and your column is var
:
dat = dat %>% mutate(candy.flag = factor(ifelse(var == "Candy", "Candy", "Non-Candy")))
Another solution with dplyr
using case_when
:
dat %>%
mutate(var = case_when(var == 'Candy' ~ 'Candy',
TRUE ~ 'Non-Candy'))
The syntax for case_when
is condition ~ value to replace
. Documentation here.
Probably less efficient than the solution using replace
, but an advantage is that multiple replacements could be performed in a single command while still being nicely readable, i.e. replacing to produce three levels:
dat %>%
mutate(var = case_when(var == 'Candy' ~ 'Candy',
var == 'Water' ~ 'Water',
TRUE ~ 'Neither-Water-Nor-Candy'))