Try this: # example data - Jan 31/00, Feb 29/00, Mar 31/00, ..., Dec 31/00 d <- seq(as.Date("2000-02-01"), by = "month", length = 12) - 1 d
# find beginning of next month nextmon <- function(d) as.Date(cut(as.Date(cut(d, "month")) + 32, "month")) # add number of days from start of current month to next month nextmon(d) + as.POSIXlt(d)$mday - 1 # If all your dates are at month end and you want the plus 1 month # to be at month end too then replace last line with: nextmon(nextmon(d)) - 1 The last one can be done even more easily with as.yearmon from zoo. It converts the dates to a year plus 0 for jan, 1/12 for feb, etc. Also, as.Date.yearmon(..., frac = 1) converts back from yearmon class to Date class using end of month for the result so: library(zoo) as.Date(as.yearmon(d) + 1/12, frac = 1) On Thu, Sep 18, 2008 at 12:24 PM, <[EMAIL PROTECTED]> wrote: > Dear R experts, > I have a problem in modifying one column of a dataframe with a datatime > format using a datetime operator. > Here is my dataframe A: > > DATACONT PROVINCIA VALORE > 1 2007-12-31 MI 1 > 2 2007-12-31 PV 2 > 3 2007-12-31 NA 3 > 4 2007-12-31 MI 4 > 5 2007-12-31 RM 5 > 6 2007-12-31 RM 6 > 7 2007-12-31 MI 7 > 8 2008-12-31 MI 11 > 9 2008-12-31 PV 12 > 10 2008-12-31 NA 13 > 11 2008-12-31 MI 14 > 12 2008-12-31 RM 15 > 13 2008-12-31 RM 16 > 14 2008-12-31 MI 17 > 15 2006-12-31 MI -9 > 16 2006-12-31 PV -8 > 17 2006-12-31 NA -7 > 18 2006-12-31 MI -6 > 19 2006-12-31 RM -5 > 20 2006-12-31 RM -4 > 21 2006-12-31 MI -3 > > Suppose I want to shift all dates by 1 year, obtaining the following > dataframe B: > > DATACONT PROVINCIA VALORE > 1 2008-12-31 MI 1 > 2 2008-12-31 PV 2 > 3 2008-12-31 NA 3 > 4 2008-12-31 MI 4 > 5 2008-12-31 RM 5 > 6 2008-12-31 RM 6 > 7 2008-12-31 MI 7 > 8 2009-12-31 MI 11 > 9 2009-12-31 PV 12 > 10 2009-12-31 NA 13 > 11 2009-12-31 MI 14 > 12 2009-12-31 RM 15 > 13 2009-12-31 RM 16 > 14 2009-12-31 MI 17 > 15 2007-12-31 MI -9 > 16 2007-12-31 PV -8 > 17 2007-12-31 NA -7 > 18 2007-12-31 MI -6 > 19 2007-12-31 RM -5 > 20 2007-12-31 RM -4 > 21 2007-12-31 MI -3 > > I tried with seq.Date: > seq.Date(a$"DATA",by="1 month",len=2)[2] > > but it works only for single values (the "from" must have length=1). > Any hints ? > Thank you in advance > > Angelo Linardi > > ** Le e-mail provenienti dalla Banca d'Italia sono trasmesse in buona fede e > non > comportano alcun vincolo ne' creano obblighi per la Banca stessa, salvo che > cio' non > sia espressamente previsto da un accordo scritto. > Questa e-mail e' confidenziale. Qualora l'avesse ricevuta per errore, La > preghiamo di > comunicarne via e-mail la ricezione al mittente e di distruggerne il > contenuto. La > informiamo inoltre che l'utilizzo non autorizzato del messaggio o dei suoi > allegati > potrebbe costituire reato. Grazie per la collaborazione. > -- E-mails from the Bank of Italy are sent in good faith but they are neither > binding on > the Bank nor to be understood as creating any obligation on its part except > where > provided for in a written agreement. This e-mail is confidential. If you have > received it > by mistake, please inform the sender by reply e-mail and delete it from your > system. > Please also note that the unauthorized disclosure or use of the message or any > attachments could be an offence. Thank you for your cooperation. ** > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.