我希望通过向startDate
添加1个月来获取endDate
和startDate
之间的日期序列。即,如果startDate
是2013-01-31而endDate
是2013-07-31,我希望看到这样的日期:
“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"
那么,获得正确输出的最简单的解决方案是什么?
答案 0 :(得分:21)
我必须使用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
还有许多其他日期功能,我强烈建议您一起来看看。
答案 1 :(得分:14)
这不起作用,因为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"