I have a vector of dates and I want to set the date to NA if it is prior to another vector.
I tried ifelse(date_vector1>=date_vector2, date_vector1, NA), but the output is not a Date and applying as.Date() return an error.
I then tried dplyr::if_else(date_vector1>=date_vector2, date_vector1, NA_real_), but it returns the same error.
The error is this one :
Error in as.Date.numeric(value) : 'origin' must be supplied
How can I use the ifelse statement with dates ?
We can use data.table to create a new column
library(data.table)
setDT(df1)[date_vector1>= date_vector2, newcol := date_vector1]
df1
# date_vector1 date_vector2 newcol
#1: 2017-05-29 2017-05-13 2017-05-29
#2: 2017-05-22 2017-05-26 <NA>
#3: 2017-05-26 2017-05-18 2017-05-26
#4: 2017-05-28 2017-05-14 2017-05-28
#5: 2017-05-25 2017-05-27 <NA>
If both these are vectors are not a variable in a data.frame/data.table, then do
i1 <- date_vector1>= date_vector2
newvector <- date_vector2
newvector[i1] <- date_vector1[i1]
newvector[!i1] <- NA
newvector
#[1] "2017-05-29" NA "2017-05-26" "2017-05-28" NA
It is better not to use ifelse on Date as dates are stored as integers it will coerce to integer class and we may have to convert it back to Date class again with as.Date(..., origin = '1970-01-01')
set.seed(24)
date_vector1 <- sample((Sys.Date() - 1:10), 5, replace = FALSE)
date_vector2 <- sample((Sys.Date() - 1:20), 5, replace = FALSE)
df1 <- data.frame(date_vector1, date_vector2)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With