【问题标题】:In R how to calculate if Date is earlier then date X?在R中如何计算日期是否早于日期X?
【发布时间】:2021-07-12 10:56:42
【问题描述】:

我得到了一个包含日期列的 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 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”。

如何修复我的代码?

谢谢

【问题讨论】:

    标签: r if-statement as.date


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      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,它将维护日期列的类。

      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 
      

      【讨论】:

      • 谢谢!我不知道 dplyr if_else。很高兴知道它不会改变类。
      猜你喜欢
      • 1970-01-01
      • 2018-04-05
      • 2015-01-04
      • 2023-03-16
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 2013-03-30
      相关资源
      最近更新 更多