在R中使用ifelse和Dates

时间:2017-06-01 09:57:26

标签: r date

我有一个日期向量,如果它在另一个向量之前,我想将日期设置为NA。

我尝试了ifelse(date_vector1>=date_vector2, date_vector1, NA),但输出不是日期,并且应用as.Date()会返回错误。

然后我尝试dplyr::if_else(date_vector1>=date_vector2, date_vector1, NA_real_),但它返回相同的错误。

错误就是这个:

  

as.Date.numeric(value)出错:必须提供'origin'

如何将ifelse语句与日期一起使用?

1 个答案:

答案 0 :(得分:1)

我们可以使用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    

最好不要在ifelse上使用Date,因为日期会被存储为强制转换为integer类的整数,我们可能需要将其转换回Date再次使用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)