11

我想通过将 1 个月添加startDate到. 即,如果是 2013-01-31 并且是 2013-07-31,我希望看到这样的日期:endDatestartDatestartDateendDate

"2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30" "2013-05-31" "2013-06-30" "2013-07-31"

我努力了

seq.Date(as.Date("2013-01-31"),by="month",length.out=7)

但是这段代码的输出是这样的

> seq.Date(as.Date("2013-01-31"),by="month",length.out=7)
[1] "2013-01-31" "2013-03-03" "2013-03-31" "2013-05-01" "2013-05-31" "2013-07-01" "2013-07-31"

那么,获得正确输出的最简单解决方案是什么?

4

2 回答 2

24

我必须在 R 中处理日期,我发现的最有用的日期数据包之一是lubridate. 对于您的问题,您可以简单地执行以下操作:

require(lubridate)
# ymd function parses dates in year-month-day format
startDate <- ymd('2013-01-31')
# The %m+% adds months to dates without exceeding the last day
myDates <- startDate %m+% months(c(0:6))

lubridate还有很多其他的日期功能,强烈推荐看看。

于 2013-07-16T16:19:24.780 回答
15

这不起作用,因为 R 不确定如何处理该月的最后一天。所以我有一个简单的解决方案:做同样的事情,但使用下个月的第一天,然后减去 1:

seq(as.Date("2013-02-1"),by="month",length.out=7) - 1
[1] "2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30" "2013-05-31" "2013-06-30" "2013-07-31"
于 2013-07-16T15:57:25.443 回答