R:将一个月添加到一个日期

R:将一个月添加到一个日期,r,dataframe,xts,zoo,r-rook-package,R,Dataframe,Xts,Zoo,R Rook Package,我想通过向startDate添加1个月来获取startDate和endDate之间的日期序列。也就是说,如果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

我想通过向
startDate
添加1个月来获取
startDate
endDate
之间的日期序列。也就是说,如果
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"

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

这不起作用,因为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"

我必须处理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))
require(润滑油)
#ymd函数解析年-月-日格式的日期

startDate如果您使用的是月度数据,最简单的解决方案是使用zoo的
yearmon
class.bug bug…..它不适用于date=“2013-01-30”>seq(as.date(“2013-01-30”)+1,by=“month”,length.out=7)-1[1]“2013-01-30”“2013-03-02”“2013-03-30”“2013-04-30”“2013-05-30”“2013-06-30”“2013-07-30”您想做什么?一个月的第二天到最后一天?如果是这样,请使用seq(as.Date(“2013-02-1”),by=“month”,length.out=7)-2[1]“2013-01-30”“2013-02-27”“2013-03-30”“2013-04-29”“2013-05-30”“2013-06-29”“2013-07-30”yyyyyy/mm/dd,yyyyyy/mm+1/dd,yyyyyyy/mm+2/dd……此格式。如果日期无效,则使用之前的有效日期(即2013-02-31应转换为2013-02-28),它在二月后不起作用<代码>截止日期(“2019-02-28”)%m-%months(6)
给我一个输出,如
“2018-11-28”
@brucewayn在处理日期时有一些边缘情况。例如,这可能是因为不清楚用户想要的是本月28日还是本月最后一天。更安全的方法是使用月的第一天减去一天,就像其他答案一样。例如,
截止日期(“2019-03-01”)%m-%months(6)-days(1)
将为您提供
“2018-08-31”