Slavek
March 10, 2021, 10:51am
1
Hi,
I have this simple question.
Having this df:
HMDE.Service.model.info <- data.frame(
stringsAsFactors = FALSE,
URN = c("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg"),
VIN.M.Long = c("xxx", "xxx", "yyy", "yyy", "yyy", "zzz", "abc"),
ModelYear = c(2008, 2015, 2005, 2011, 2020, 2018, 2019)
)
I would like to change some descriptions of VIN.M.Long depending on ModelYear. I did this:
library(dplyr)
HMDE.Service.model.info <- HMDE.Service.model.info %>%
mutate(
VIN.M.Long = case_when(
VIN.M.Long=='xxx' & ModelYear < 2014 ~ 'xxx (2007-13)',
VIN.M.Long=='yyy' & ModelYear < 2006 ~ 'yyy (2005-11)',
VIN.M.Long=='yyy' & ModelYear >= 2006 & ModelYear < 2015 ~ 'yyy (2012-15)'
)
)
...but it recodes only models mentioned in the code.
How can I keep all other VIN.M.Long unchanged?
Can you help?
I am sure this is something very simple!
you need a condition that if the previous checked conditions have not registered, will register, TRUE is a good test that guarantees this.
HMDE.Service.model.info %>%
mutate(
VIN.M.Long = case_when(
VIN.M.Long=='xxx' & ModelYear < 2014 ~ 'xxx (2007-13)',
VIN.M.Long=='yyy' & ModelYear < 2006 ~ 'yyy (2005-11)',
VIN.M.Long=='yyy' & ModelYear >= 2006 & ModelYear < 2015 ~ 'yyy (2012-15)',
TRUE ~ VIN.M.Long
)
)
Slavek
March 10, 2021, 11:48am
3
Thank you very much! That was simple.
Sorry for adjusting my initial request but I have added one variable as one little issue appeared in my real, big data:
model.info <- data.frame(
stringsAsFactors = FALSE,
URN = c("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg"),
ModelLong = c("xxx","xxx","yyy","yyy","yyy","zzz","abc"),
VIN.M.Long = c("xxx", "xxx", "yyy", "yyy", "yyy", "zzz", NA),
ModelYear = c(2008, 2015, 2005, 2011, 2020, 2018, 2019)
)
library(dplyr)
model.info <- model.info %>%
mutate(
VIN.M.Long = case_when(
VIN.M.Long=='xxx' & ModelYear < 2014 ~ 'xxx (2007-13)',
VIN.M.Long=='yyy' & ModelYear < 2006 ~ 'yyy (2005-11)',
VIN.M.Long=='yyy' & ModelYear >= 2006 & ModelYear < 2015 ~ 'yyy (2012-15)',
TRUE ~ VIN.M.Long
)
)
What can I add to the code to copy ModelLong info to VIN.M.Long if VIN.M.Long is blank?
Basically, VIN.M.Long for record ggg should be the same as ModelLong.
Thank you
one option is to use coalese()
mutate(
VIN.M.Long = case_when(
VIN.M.Long=='xxx' & ModelYear < 2014 ~ 'xxx (2007-13)',
VIN.M.Long=='yyy' & ModelYear < 2006 ~ 'yyy (2005-11)',
VIN.M.Long=='yyy' & ModelYear >= 2006 & ModelYear < 2015 ~ 'yyy (2012-15)',
TRUE ~ VIN.M.Long
) %>% coalesce(ModelLong)
)