首页 > 解决方案 > 在R中如何计算日期是否早于日期X?

问题描述

我有一个带有日期列的 DF。我想检查列中的日期是在 2020 年 1 月 1 日之后还是之前。创建一个新列,如果之前的列日期在之前,则插入 2020 年 1 月 1 日,否则插入之前的列日期。

日期格式为 YYYY-MM-DD

 
开始 结束
2020-12-31 2021-01-12
2018-01-02 2020-03-10
2019-04-12 2020-12-04
2020-10-15 2021-03-27

我想:

 
开始 结束 开始_2
2020-12-31 2021-01-12 2020-12-31
2018-01-02 2020-03-10 2020-01-01
2019-04-12 2020-12-04 2020-01-01
2020-10-15 2021-03-27 2020-10-15

我写的代码是:DF$Beginning_2 <- ifelse("2020-01-01" > DF$Beginning,"2020-01-01", DF$Beginning)

我得到这个

 
开始 结束 开始_2
2020-12-31 2021-01-12 18554
2018-01-02 2020-03-10 2020-01-01
2019-04-12 2020-12-04 2020-01-01  
2020-10-15 2021-03-27 18453

我的代码工作了一半。它将格式转换为字符。我需要它保持日期。我尝试在整个代码中使用日期,但没有太大变化。最大的变化是大于 2020-01-01 的日期是 NA 而不是“18554”。

如何修复我的代码?

谢谢

标签: rif-statementas.date

解决方案


您可以使用pmax

DF$Beginning_2 <- pmax(DF$Beginning, as.Date("2020-01-01"))
#DF$Beginning_2 <- pmax(DF$Beginning, "2020-01-01") #Works also

DF
#   Beginning        End Beginning_2
#1 2020-12-31 2021-01-12  2020-12-31
#2 2018-01-02 2020-03-10  2020-01-01
#3 2019-04-12 2020-12-04  2020-01-01
#4 2020-10-15 2021-03-27  2020-10-15

str(DF)
#'data.frame':   4 obs. of  3 variables:
# $ Beginning  : Date, format: "2020-12-31" "2018-01-02" ...
# $ End        : Date, format: "2021-01-12" "2020-03-10" ...
# $ Beginning_2: Date, format: "2020-12-31" "2020-01-01" ...

推荐阅读