Subtracting months - issue with last day of month?

后端 未结 3 1096
暗喜
暗喜 2020-12-10 15:50

Quick question on dates in R. Check out this snippet of code:

Sys.Date() - months(3)
# [1] \"2013-12-31\"
Sys.Date() - months(18)
# [1] NA

相关标签:
3条回答
  • 2020-12-10 16:09

    The lubridate functions %m+% and %m-% are designed to handle this issue ("Add and subtract months to a date without exceeding the last day of the new month").

    library(lubridate)
    Sys.Date() %m-% months(18)
    # [1] "2012-09-30"
    
    # or to make it reproducible if Sys.Date() happens to be different from that in OP
    as.Date("2014-03-31") %m-% months(18)
    # [1] "2012-09-30"
    
    # example of %m+%
    as.Date("2014-01-31") + months(1)
    # [1] NA
    as.Date("2014-01-31") %m+% months(1)
    # [1] "2014-02-28"
    
    0 讨论(0)
  • 2020-12-10 16:10

    Similarly if you want to have an increment of 3 months, it can be done as follows:

    PW_Data_Plan_V1$Month = as.Date(PW_Data_Plan_V1$DOJ) %m+% months(3)
    
    0 讨论(0)
  • 2020-12-10 16:30

    The solution provides forward months exactly, i.e. 28Feb %m+% gives 28Mar, which is not ideal if working with month end data.

    To adjust the top to always give you the last day of the month, use the following code:

    ceiling_date((as.Date("2014-02-28") %m+% months(1)),"month")-days(1)
    
    > "2014-03-31"
    
    0 讨论(0)
提交回复
热议问题