adding 1 month to a date
The chron package will do that:
library(chron)
seq(chron("01/31/00"), by = "months", len = 2)[2]
[1] 02/29/00
On 10/12/05, Jim Porzak <jporzak at gmail.com> wrote:
OTOH,
> seq(as.Date("2004-01-31"), by = "month", length = 14)
[1] "2004-01-31" "2004-03-02" "2004-03-31" "2004-05-01" "2004-05-31" [6] "2004-07-01" "2004-07-31" "2004-08-31" "2004-10-01" "2004-10-31" [11] "2004-12-01" "2004-12-31" "2005-01-31" "2005-03-03" I would prefer to see dates forced to be within each month, not "leaking" into next month. IOW: [1] "2004-01-31" "2004-02-29" "2004-03-31" "2004-04-30" "2004-05-31", etc -- Jim Porzak Loyalty Matrix Inc. San Francisco, CA
On 10/12/05, Marc Schwartz <MSchwartz at mn.rr.com> wrote:
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
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html