在 R 中如何计算日期是否早于日期 X?

In R how to calculate if Date is earlier then date 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

我要:

开始结束 Beginning_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)

我明白了

开始结束 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

我的代码运行一半。它将格式转换为 char。我需要它保持最新状态。我尝试在整个代码中按日期对接,但没有太大变化。最大的变化是大于 2020-01-01 的日期是 NA 而不是“18554”。

如何修复我的代码?

谢谢

您可以使用 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" ...

Base R ifelse 会将 return 日期作为数字,您需要将它们转换回日期。

DF$Beginning_2 <- as.Date(ifelse(DF$Beginning > as.Date("2020-01-01"), 
                  DF$Beginning, as.Date("2020-01-01")), origin = '1970-01-01')

您可以使用 dplyr::if_else 来维护日期列的 class。

DF$Beginning_2 <- dplyr::if_else(DF$Beginning > as.Date("2020-01-01"), 
                         DF$Beginning, as.Date("2020-01-01"))

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