我有一个日期向量,如果它先于另一个向量,我想将日期设置为 NA。
我尝试了 ifelse(date_vector1>=date_vector2, date_vector1, NA)
,但输出不是日期并且应用 as.Date()
返回错误。
然后我尝试了 dplyr::if_else(date_vector1>=date_vector2, date_vector1, NA_real_)
,但它返回相同的错误。
错误是这个:
Error in as.Date.numeric(value) : 'origin' must be supplied
如何使用带有日期的 ifelse
语句?
我们可以使用data.table
来创建一个新列
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>
如果这两个都是向量而不是 data.frame/data.table 中的变量,则执行
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
最好不要在 Date
上使用 ifelse
,因为日期存储为整数,它会强制转换为 integer
类,我们可能不得不使用 as.Date(..., origin = '1970-01-01')
再次将其转换回
Date
类
数据
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)