[R] adding 1 month to a date

Marc Schwartz MSchwartz at mn.rr.com
Wed Oct 12 14:37:49 CEST 2005


Thanks to Prof. Ripley for pointing this out.

One of the approaches that I had considered here was to set up a vector
of the number of days in each month (adjusting of course for leap
years), and use "day arithmetic" to add/subtract the appropriate number
of days.

However, it was easier to use seq.Date() and to further consider putting
a wrapper around it to make it yet even easier to use.

Marc

On Wed, 2005-10-12 at 13:23 +0100, Prof Brian Ripley wrote:
> On Wed, 12 Oct 2005, bogdan romocea wrote:
> 
> > Simple addition and subtraction works as well:
> >  as.Date("1995/12/01",format="%Y/%m/%d") + 30
> > If you have datetime values you can use
> >  strptime("1995-12-01 08:00:00",format="%Y-%m-%d %H:%M:%S") + 30*24*3600
> > where 30*24*3600 = 30 days expressed in seconds.
> 
> Sorry, not in general, as a month is not generally of 30 days (including 
> in your example).
> 
> seq.Date is a good way to do this.
> 
> >
> >
> >> -----Original Message-----
> >> From: Marc Schwartz [mailto:MSchwartz at mn.rr.com]
> >> Sent: Tuesday, October 11, 2005 10:16 PM
> >> To: t c
> >> Cc: r-help at stat.math.ethz.ch
> >> Subject: Re: [R] adding 1 month to a date
> >>
> >>
> >> On Tue, 2005-10-11 at 16:26 -0700, t c wrote:
> >>> Within an R dataset, I have a date field called date_.
> >> (The dates are
> >>> in the format YYYY-MM-DD, e.g. 1995-12-01.)
> >>
> >>> How can I add or subtract 1 month from this date, to get
> >> 1996-01-01 or
> >>> 1995-11-01.
> >>
> >> There might be an easier way to do this, but using seq.Date(), you can
> >> increment or decrement from a Time 0 by months:
> >>
> >> Add 1 month:
> >>
> >> This takes your Time 0, generates a 2 element sequence (which begins
> >> with Time 0) and then takes the second element:
> >>
> >>> seq(as.Date("1995-12-01"), by = "month", length = 2)[2]
> >> [1] "1996-01-01"
> >>
> >>
> >>
> >> Subtract 1 month:
> >>
> >> Same as above, but we use 'by = "-1 month"' and take the
> >> second element:
> >>
> >>> seq(as.Date("1995-12-01"), by = "-1 month", length = 2)[2]
> >> [1] "1995-11-01"
> >>
> >>
> >> See ?as.Date and ?seq.Date for more information. The former
> >> function is
> >> used to convert from a character vector to a Date class object. Note
> >> that in your case, the date format is consistent with the default. Pay
> >> attention to the 'format' argument in as.Date() if your dates
> >> should be
> >> in other formats.
> >>
> >> HTH,
> >>
> >> Marc Schwartz




More information about the R-help mailing list