每月最后一天创建日期序列

4

我正在尝试创建一个日期序列,该序列为每个月的最后一天。 例如,起始日期为"2018-01-31"。 我想创建自起始日期以来每个月的最后一天的序列。

[1] "2018-01-31" "2018-02-28" "2018-03-31" "2018-04-30" "2018-05-31" "2018-06-30"

我试图使用这个语法:

seq(as.Date("2018-01-31",format="%Y-%m-%d"),by="month",length.out=6)

但它输出了这个结果:
[1] "2018-01-31" "2018-03-03" "2018-03-31" "2018-05-01" "2018-05-31" "2018-07-01"

如何获取从开始日期起每个月的最后一天?

添加(减去)月份,而不超过新月份的最后一天 - Henrik
3个回答

5
如果您想获取月末日期,而不是从2018-01-31开始,请尝试:
seq(as.Date("2018-02-01",format="%Y-%m-%d"),by="month",length.out=6) -1
[1] "2018-01-31" "2018-02-28" "2018-03-31" "2018-04-30" "2018-05-31" "2018-06-30"

5
我们可以使用 `lubridate` 包及其 `%m+%` 操作符:
library(lubridate)

as.Date("2018-01-31") %m+% months(0:5)
#> [1] "2018-01-31" "2018-02-28" "2018-03-31" "2018-04-30" "2018-05-31" "2018-06-30"

0

tidyverse 已经添加了 clock 包,此外还有 lubridate 包,该包具有很好的功能:

library(clock)

date_build(2018, 1:5, 31, invalid = "previous")
[1] "2018-01-31" "2018-02-28" "2018-03-31" "2018-04-30" "2018-05-31"

当日期被排序时,2018-02-31 不是一个有效的日期。 invalid 参数明确了在这种情况下要做什么:转到上一个有效日期的最后一天。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接