r-在每个月的最后一天创建日期序列



我试图在每个月的最后一天创建一个日期序列。例如,开始日期是";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"

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

如果您想要一个月的最后一天,而不是从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"

我们可以使用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"

tidyverselubridate包中添加了时钟包,该包具有良好的功能:

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参数明确了在这种情况下要做什么:转到"previous"有效日期的最后一天。

最新更新