r - 在 R 中将 ifelse 与日期一起使用

标签 r date

<分区>

我有一个日期向量,如果它先于另一个向量,我想将日期设置为 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)

关于r - 在 R 中将 ifelse 与日期一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44304379/

相关文章:

javascript - 有没有办法防止JS中的Date对象溢出天/月?

r - 过滤包含多个关键字的列

R ggplot2 : Labeling a horizontal line without associating the label with a series

php - 数据库; ORDER BY STR_TO_DATE 反之亦然

PHP 按日期排序数组?

jquery - Keith Wood 的 Jquery 倒计时的替代示例的 3 位数字

r - 插入符序列不输出进度

c++ - 带 Rcpp 的行矩阵减去 vector

r - 在 R Markdown 中将文本方向更改为从右到左

php - MySQL日期转换(“01/Jan/2015”到 “01012015”)