# Problems with monthly sequences

15 messages
Open this post in threaded view
|
Report Content as Inappropriate

## Problems with monthly sequences

 Dear R users, Could anyone help me with creating a monthly series of dates? When I try to do: dates = timeSequence(from = "2005-12-31", to = "2006-12-31", format = "%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") I get: > dates [1] "Europe/Warsaw"  [1] [2005-12-31] [2006-01-31] [2006-03-03] [2006-03-31] [2006-05-01]  [6] [2006-05-31] [2006-07-01] [2006-07-31] [2006-08-31] [2006-10-01] [11] [2006-10-31] [2006-12-01] [2006-12-31] Unfourtunately, I would like to heave end of month at each point. I thought, that maybe using this function would also help when trying to add a month to a date. I would like to have "2006-01-31" + 1M = "2006-02-28" in MS EXCEL I would use EDATE("2006-01-31";1), and that would work. I couldn't find any similar function in R for that. Am I missing some function? Best regards, Wojtek         [[alternative HTML version deleted]] _______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

 Try this: library(fCalendar) dates <- timeSequence(from = "2005-12-1", to = "2006-12-1", format = "%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") dates <- timeLastDayInMonth(dates) On 2/4/06, Wojciech Slusarski <[hidden email]> wrote: > Dear R users, > > Could anyone help me with creating a monthly series of dates? > When I try to do: > > dates = timeSequence(from = "2005-12-31", to = "2006-12-31", format = > "%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") > > I get: > > > dates > [1] "Europe/Warsaw" >  [1] [2005-12-31] [2006-01-31] [2006-03-03] [2006-03-31] [2006-05-01] >  [6] [2006-05-31] [2006-07-01] [2006-07-31] [2006-08-31] [2006-10-01] > [11] [2006-10-31] [2006-12-01] [2006-12-31] > > Unfourtunately, I would like to heave end of month at each point. > I thought, that maybe using this function would also help when trying to add > a month to a date. I would like to have > > "2006-01-31" + 1M = "2006-02-28" > > in MS EXCEL I would use EDATE("2006-01-31";1), and that would work. I > couldn't find any similar function in R for that. Am I missing some > function? > > Best regards, > Wojtek > >        [[alternative HTML version deleted]] > > _______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-sig-finance> _______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

 Many thanks to Gabor for this comment. For calendar tasks I have written a report (44 pages)  which may be helpful for many calendar manipulations using Rmetrics. Here is the link: http://www.itp.phys.ethz.ch/econophysics/R/pdf/calendar.pdfYou can also access this "timeDate and timeSeries" white pages from the Rmetrics home page: www.rmetrics.org regards Diethelm Gabor Grothendieck wrote: >Try this: > >library(fCalendar) >dates <- timeSequence(from = "2005-12-1", to = "2006-12-1", format = >"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") >dates <- timeLastDayInMonth(dates) > > >On 2/4/06, Wojciech Slusarski <[hidden email]> wrote: >   > >>Dear R users, >> >>Could anyone help me with creating a monthly series of dates? >>When I try to do: >> >>dates = timeSequence(from = "2005-12-31", to = "2006-12-31", format = >>"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") >> >>I get: >> >>     >> >>>dates >>>       >>> >>[1] "Europe/Warsaw" >> [1] [2005-12-31] [2006-01-31] [2006-03-03] [2006-03-31] [2006-05-01] >> [6] [2006-05-31] [2006-07-01] [2006-07-31] [2006-08-31] [2006-10-01] >>[11] [2006-10-31] [2006-12-01] [2006-12-31] >> >>Unfourtunately, I would like to heave end of month at each point. >>I thought, that maybe using this function would also help when trying to add >>a month to a date. I would like to have >> >>"2006-01-31" + 1M = "2006-02-28" >> >>in MS EXCEL I would use EDATE("2006-01-31";1), and that would work. I >>couldn't find any similar function in R for that. Am I missing some >>function? >> >>Best regards, >>Wojtek >> >>       [[alternative HTML version deleted]] >> >>_______________________________________________ >>[hidden email] mailing list >>https://stat.ethz.ch/mailman/listinfo/r-sig-finance>> >>     >> > >_______________________________________________ >[hidden email] mailing list >https://stat.ethz.ch/mailman/listinfo/r-sig-finance> >   > _______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

 In reply to this post by Gabor Grothendieck Gabor Grothendieck wrote: >Try this: > >library(fCalendar) >dates <- timeSequence(from = "2005-12-1", to = "2006-12-1", format = >"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") >dates <- timeLastDayInMonth(dates) >   > Alternatively you can use  > timeSequence(from = "2006-01-01", to = "2007-01-01", format = + "%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") - 3600*24 [1] "Europe/Warsaw"  [1] [2005-12-31] [2006-01-31] [2006-02-28] [2006-03-31] [2006-04-30]  [6] [2006-05-31] [2006-06-30] [2006-07-31] [2006-08-31] [2006-09-30] [11] [2006-10-31] [2006-11-30] [2006-12-31] Please use proper ISO-8601 notation: 2006-01-05 and not 2006-1-5 ! DW > >On 2/4/06, Wojciech Slusarski <[hidden email]> wrote: >   > >>Dear R users, >> >>Could anyone help me with creating a monthly series of dates? >>When I try to do: >> >>dates = timeSequence(from = "2005-12-31", to = "2006-12-31", format = >>"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") >> >>I get: >> >>     >> >>>dates >>>       >>> >>[1] "Europe/Warsaw" >> [1] [2005-12-31] [2006-01-31] [2006-03-03] [2006-03-31] [2006-05-01] >> [6] [2006-05-31] [2006-07-01] [2006-07-31] [2006-08-31] [2006-10-01] >>[11] [2006-10-31] [2006-12-01] [2006-12-31] >> >>Unfourtunately, I would like to heave end of month at each point. >>I thought, that maybe using this function would also help when trying to add >>a month to a date. I would like to have >> >>"2006-01-31" + 1M = "2006-02-28" >> >>in MS EXCEL I would use EDATE("2006-01-31";1), and that would work. I >>couldn't find any similar function in R for that. Am I missing some >>function? >> >>Best regards, >>Wojtek >> >>       [[alternative HTML version deleted]] >> >>_______________________________________________ >>[hidden email] mailing list >>https://stat.ethz.ch/mailman/listinfo/r-sig-finance>> >>     >> > >_______________________________________________ >[hidden email] mailing list >https://stat.ethz.ch/mailman/listinfo/r-sig-finance> >   > _______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

 In reply to this post by Wojciech Slusarski 1. Why does subtracting 3600*24 (seconds, I presume) in DW's solution work? 2. Does anyone who uses gmail and gets this  DL's emails in digest form have a good method for responding to just one message (I use reply/edit subject/delete everything from the quoted material except for the message I want to respond to -- That's obviously not much fun when trying to respond to an r-help message for which the digest can be long, and where one can end up fat-fingering the cut&paste of the message (thus breaking the thread. ) > Gabor Grothendieck wrote: > > >Try this: > > > >library(fCalendar) > >dates <- timeSequence(from = "2005-12-1", to = "2006-12-1", format = > >"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") > >dates <- timeLastDayInMonth(dates) > > > > > Alternatively you can use > >  > timeSequence(from = "2006-01-01", to = "2007-01-01", format = > + "%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") - 3600*24 > [1] "Europe/Warsaw" >  [1] [2005-12-31] [2006-01-31] [2006-02-28] [2006-03-31] [2006-04-30] >  [6] [2006-05-31] [2006-06-30] [2006-07-31] [2006-08-31] [2006-09-30] > [11] [2006-10-31] [2006-11-30] [2006-12-31] > > Please use proper ISO-8601 notation: 2006-01-05 and not 2006-1-5 ! > > DW > [Other quoted messages deleted] -- -- Vivek Satsangi Student, Rochester, NY USA _______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

 In reply to this post by Diethelm Wuertz Well, Thanks for the help, but I thought about something more general, that could allow me adding n months to a date. I am sorry, that my question wasn't so clear. If someone needed, here's the code: EMONTH = function(date.s, n) {   #function adds 'n' months to 'date.s'   dates = timeSequence(from = format(date.s@Data, "%Y-%m-%d"), length.out = n+1, by = "month")   if(atoms(date.s)[1,"d"]>28)   {       if(atoms(dates)[n+1,"d"]<4)    {       emonth = dates[n+1]-atoms(dates)[n+1,"d"]*24*3600    } else {      emonth = dates[n+1]    }   } else {     emonth = dates[n+1]   }   emonth } # test date.s = timeDate("2005-12-30") > EMONTH(date.s, 2)@Data [1] "2006-02-28" Best regards, Wojtek 2006/2/5, Diethelm Wuertz <[hidden email]>: > > Gabor Grothendieck wrote: > > >Try this: > > > >library(fCalendar) > >dates <- timeSequence(from = "2005-12-1", to = "2006-12-1", format = > >"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") > >dates <- timeLastDayInMonth(dates) > > > > > Alternatively you can use > > > timeSequence(from = "2006-01-01", to = "2007-01-01", format = > + "%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") - 3600*24 > [1] "Europe/Warsaw" > [1] [2005-12-31] [2006-01-31] [2006-02-28] [2006-03-31] [2006-04-30] > [6] [2006-05-31] [2006-06-30] [2006-07-31] [2006-08-31] [2006-09-30] > [11] [2006-10-31] [2006-11-30] [2006-12-31] > > Please use proper ISO-8601 notation: 2006-01-05 and not 2006-1-5 ! > > DW > > > > >On 2/4/06, Wojciech Slusarski <[hidden email]> wrote: > > > > > >>Dear R users, > >> > >>Could anyone help me with creating a monthly series of dates? > >>When I try to do: > >> > >>dates = timeSequence(from = "2005-12-31", to = "2006-12-31", format = > >>"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") > >> > >>I get: > >> > >> > >> > >>>dates > >>> > >>> > >>[1] "Europe/Warsaw" > >> [1] [2005-12-31] [2006-01-31] [2006-03-03] [2006-03-31] [2006-05-01] > >> [6] [2006-05-31] [2006-07-01] [2006-07-31] [2006-08-31] [2006-10-01] > >>[11] [2006-10-31] [2006-12-01] [2006-12-31] > >> > >>Unfourtunately, I would like to heave end of month at each point. > >>I thought, that maybe using this function would also help when trying to > add > >>a month to a date. I would like to have > >> > >>"2006-01-31" + 1M = "2006-02-28" > >> > >>in MS EXCEL I would use EDATE("2006-01-31";1), and that would work. I > >>couldn't find any similar function in R for that. Am I missing some > >>function? > >> > >>Best regards, > >>Wojtek > >> > >>       [[alternative HTML version deleted]] > >> > >>_______________________________________________ > >>[hidden email] mailing list > >>https://stat.ethz.ch/mailman/listinfo/r-sig-finance> >> > >> > >> > > > >_______________________________________________ > >[hidden email] mailing list > >https://stat.ethz.ch/mailman/listinfo/r-sig-finance> > > > > > > > _______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-sig-finance>         [[alternative HTML version deleted]] _______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

 I thought a bit about the function below, and see a problem, when n<0 (I would like to decrease the date.s by one month). I still have no Idea how to implement it. Best regards, Wojtek 2006/2/5, Wojciech Slusarski <[hidden email]>: > > Well, > > Thanks for the help, but I thought about something more general, that > could allow me adding n months to a date. I am sorry, that my question > wasn't so clear. If someone needed, here's the code: > > > EMONTH = > function(date.s, n) > { >   #function adds 'n' months to 'date.s' >   dates = timeSequence(from = format(date.s@Data, "%Y-%m-%d"), length.out= n+1, by = "month") >   if(atoms(date.s)[1,"d"]>28) >   { >       if(atoms(dates)[n+1,"d"]<4) >    { >       emonth = dates[n+1]-atoms(dates)[n+1,"d"]*24*3600 >    } else { >      emonth = dates[n+1] >    } >   } else { >     emonth = dates[n+1] >   } >   emonth > } > > > > # test > > date.s = timeDate("2005-12-30") > > > EMONTH(date.s, 2)@Data > [1] "2006-02-28" > Best regards, > Wojtek > > > 2006/2/5, Diethelm Wuertz <[hidden email]>: > > > > Gabor Grothendieck wrote: > > > > >Try this: > > > > > >library(fCalendar) > > >dates <- timeSequence(from = "2005-12-1", to = "2006-12-1", format = > > >"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") > > >dates <- timeLastDayInMonth(dates) > > > > > > > > Alternatively you can use > > > > > timeSequence(from = "2006-01-01", to = "2007-01-01", format = > > + "%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") - 3600*24 > > [1] "Europe/Warsaw" > > [1] [2005-12-31] [2006-01-31] [2006-02-28] [2006-03-31] [2006-04-30] > > [6] [2006-05-31] [2006-06-30] [2006-07-31] [2006-08-31] [2006-09-30] > > [11] [2006-10-31] [2006-11-30] [2006-12-31] > > > > Please use proper ISO-8601 notation: 2006-01-05 and not 2006-1-5 ! > > > > DW > > > > > > > >On 2/4/06, Wojciech Slusarski < [hidden email]> wrote: > > > > > > > > >>Dear R users, > > >> > > >>Could anyone help me with creating a monthly series of dates? > > >>When I try to do: > > >> > > >>dates = timeSequence(from = "2005-12-31", to = "2006-12-31", format = > > >>"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") > > >> > > >>I get: > > >> > > >> > > >> > > >>>dates > > >>> > > >>> > > >>[1] "Europe/Warsaw" > > >> [1] [2005-12-31] [2006-01-31] [2006-03-03] [2006-03-31] [2006-05-01] > > >> [6] [2006-05-31] [2006-07-01] [2006-07-31] [2006-08-31] [2006-10-01] > > >>[11] [2006-10-31] [2006-12-01] [2006-12-31] > > >> > > >>Unfourtunately, I would like to heave end of month at each point. > > >>I thought, that maybe using this function would also help when trying > > to add > > >>a month to a date. I would like to have > > >> > > >>"2006-01-31" + 1M = "2006-02-28" > > >> > > >>in MS EXCEL I would use EDATE("2006-01-31";1), and that would work. I > > >>couldn't find any similar function in R for that. Am I missing some > > >>function? > > >> > > >>Best regards, > > >>Wojtek > > >> > > >>       [[alternative HTML version deleted]] > > >> > > >>_______________________________________________ > > >> [hidden email] mailing list > > >>https://stat.ethz.ch/mailman/listinfo/r-sig-finance> > >> > > >> > > >> > > > > > >_______________________________________________ > > >[hidden email] mailing list > > > https://stat.ethz.ch/mailman/listinfo/r-sig-finance> > > > > > > > > > > > > _______________________________________________ > > [hidden email] mailing list > > https://stat.ethz.ch/mailman/listinfo/r-sig-finance> > > >         [[alternative HTML version deleted]] _______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

 >From your series of posts I assume you really only need the last day of the month that is m months from now but the following could easily be enhanced to work in general.  It uses the yearmon class from zoo. It works with positive and negative m: library(zoo) m <- -10 date.t <- date.s date.t@Data <- as.POSIXlt(as.Date(as.yearmon(as.POSIXct(date.s))+m/12, frac=1)) On 2/5/06, Wojciech Slusarski <[hidden email]> wrote: > I thought a bit about the function below, and see a problem, when n<0 (I > would like to decrease the date.s by one month). I still have no Idea how to > implement it. > > Best regards, > Wojtek > > > 2006/2/5, Wojciech Slusarski <[hidden email]>: > > > > Well, > > > > Thanks for the help, but I thought about something more general, that > > could allow me adding n months to a date. I am sorry, that my question > > wasn't so clear. If someone needed, here's the code: > > > > > > EMONTH = > > function(date.s, n) > > { > >   #function adds 'n' months to 'date.s' > >   dates = timeSequence(from = format(date.s@Data, "%Y-%m-%d"), length.out= n+1, by = "month") > >   if(atoms(date.s)[1,"d"]>28) > >   { > >       if(atoms(dates)[n+1,"d"]<4) > >    { > >       emonth = dates[n+1]-atoms(dates)[n+1,"d"]*24*3600 > >    } else { > >      emonth = dates[n+1] > >    } > >   } else { > >     emonth = dates[n+1] > >   } > >   emonth > > } > > > > > > > > # test > > > > date.s = timeDate("2005-12-30") > > > > > EMONTH(date.s, 2)@Data > > [1] "2006-02-28" > > Best regards, > > Wojtek > > > > > > 2006/2/5, Diethelm Wuertz <[hidden email]>: > > > > > > Gabor Grothendieck wrote: > > > > > > >Try this: > > > > > > > >library(fCalendar) > > > >dates <- timeSequence(from = "2005-12-1", to = "2006-12-1", format = > > > >"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") > > > >dates <- timeLastDayInMonth(dates) > > > > > > > > > > > Alternatively you can use > > > > > > > timeSequence(from = "2006-01-01", to = "2007-01-01", format = > > > + "%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") - 3600*24 > > > [1] "Europe/Warsaw" > > > [1] [2005-12-31] [2006-01-31] [2006-02-28] [2006-03-31] [2006-04-30] > > > [6] [2006-05-31] [2006-06-30] [2006-07-31] [2006-08-31] [2006-09-30] > > > [11] [2006-10-31] [2006-11-30] [2006-12-31] > > > > > > Please use proper ISO-8601 notation: 2006-01-05 and not 2006-1-5 ! > > > > > > DW > > > > > > > > > > >On 2/4/06, Wojciech Slusarski < [hidden email]> wrote: > > > > > > > > > > > >>Dear R users, > > > >> > > > >>Could anyone help me with creating a monthly series of dates? > > > >>When I try to do: > > > >> > > > >>dates = timeSequence(from = "2005-12-31", to = "2006-12-31", format = > > > >>"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") > > > >> > > > >>I get: > > > >> > > > >> > > > >> > > > >>>dates > > > >>> > > > >>> > > > >>[1] "Europe/Warsaw" > > > >> [1] [2005-12-31] [2006-01-31] [2006-03-03] [2006-03-31] [2006-05-01] > > > >> [6] [2006-05-31] [2006-07-01] [2006-07-31] [2006-08-31] [2006-10-01] > > > >>[11] [2006-10-31] [2006-12-01] [2006-12-31] > > > >> > > > >>Unfourtunately, I would like to heave end of month at each point. > > > >>I thought, that maybe using this function would also help when trying > > > to add > > > >>a month to a date. I would like to have > > > >> > > > >>"2006-01-31" + 1M = "2006-02-28" > > > >> > > > >>in MS EXCEL I would use EDATE("2006-01-31";1), and that would work. I > > > >>couldn't find any similar function in R for that. Am I missing some > > > >>function? > > > >> > > > >>Best regards, > > > >>Wojtek > > > >> > > > >>       [[alternative HTML version deleted]] > > > >> > > > >>_______________________________________________ > > > >> [hidden email] mailing list > > > >>https://stat.ethz.ch/mailman/listinfo/r-sig-finance> > > >> > > > >> > > > >> > > > > > > > >_______________________________________________ > > > >[hidden email] mailing list > > > > https://stat.ethz.ch/mailman/listinfo/r-sig-finance> > > > > > > > > > > > > > > > > > _______________________________________________ > > > [hidden email] mailing list > > > https://stat.ethz.ch/mailman/listinfo/r-sig-finance> > > > > > > > >        [[alternative HTML version deleted]] > > _______________________________________________ > [hidden email] mailing list > https://stat.ethz.ch/mailman/listinfo/r-sig-finance> _______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

 In reply to this post by Wojciech Slusarski Here comes a function which computes  time and date for the last Day n-month ahead. It is Rmetrics conform and preserves time zone, daylight saving and Financial Centers. Is that what you wanted? DW timeLastDayNMonthAhead = function(charvec, month, format = "%Y-%m-%d", FinCenter = "GMT") {     if (Sys.getenv("TZ")[[1]] != "GMT") warning("Set timezone to GMT!")     if (FinCenter == "") FinCenter = "GMT"     if (month < 0) stop("month must be positive")     date = timeLastDayInMonth(charvec, format = format, FinCenter = FinCenter)     for (i in 1:month) date = timeLastDayInMonth(date, format = format,         FinCenter = FinCenter) + 3600*24             # Return Value:     timeLastDayInMonth(date, format = format, FinCenter = FinCenter) } # Example:  > timeLastDayNMonthAhead(c("2005-12-25", "2006-02-28"), month = 2) [1] "GMT" [1] [2006-02-28] [2006-04-30] Wojciech Slusarski wrote: >I thought a bit about the function below, and see a problem, when n<0 (I >would like to decrease the date.s by one month). I still have no Idea how to >implement it. > >Best regards, >Wojtek > > >2006/2/5, Wojciech Slusarski <[hidden email]>: >   > >>Well, >> >>Thanks for the help, but I thought about something more general, that >>could allow me adding n months to a date. I am sorry, that my question >>wasn't so clear. If someone needed, here's the code: >> >> >>EMONTH = >>function(date.s, n) >>{ >>  #function adds 'n' months to 'date.s' >>  dates = timeSequence(from = format(date.s@Data, "%Y-%m-%d"), length.out= n+1, by = "month") >>  if(atoms(date.s)[1,"d"]>28) >>  { >>      if(atoms(dates)[n+1,"d"]<4) >>   { >>      emonth = dates[n+1]-atoms(dates)[n+1,"d"]*24*3600 >>   } else { >>     emonth = dates[n+1] >>   } >>  } else { >>    emonth = dates[n+1] >>  } >>  emonth >>} >> >> >> >># test >> >>date.s = timeDate("2005-12-30") >> >>     >> >>>EMONTH(date.s, 2)@Data >>>       >>> >>[1] "2006-02-28" >>Best regards, >>Wojtek >> >> >>2006/2/5, Diethelm Wuertz <[hidden email]>: >>     >> >>>Gabor Grothendieck wrote: >>> >>>       >>> >>>>Try this: >>>> >>>>library(fCalendar) >>>>dates <- timeSequence(from = "2005-12-1", to = "2006-12-1", format = >>>>"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") >>>>dates <- timeLastDayInMonth(dates) >>>> >>>> >>>>         >>>> >>>Alternatively you can use >>> >>>       >>> >>>>timeSequence(from = "2006-01-01", to = "2007-01-01", format = >>>>         >>>> >>>+ "%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") - 3600*24 >>>[1] "Europe/Warsaw" >>>[1] [2005-12-31] [2006-01-31] [2006-02-28] [2006-03-31] [2006-04-30] >>>[6] [2006-05-31] [2006-06-30] [2006-07-31] [2006-08-31] [2006-09-30] >>>[11] [2006-10-31] [2006-11-30] [2006-12-31] >>> >>>Please use proper ISO-8601 notation: 2006-01-05 and not 2006-1-5 ! >>> >>>DW >>> >>>       >>> >>>>On 2/4/06, Wojciech Slusarski < [hidden email]> wrote: >>>> >>>> >>>>         >>>> >>>>>Dear R users, >>>>> >>>>>Could anyone help me with creating a monthly series of dates? >>>>>When I try to do: >>>>> >>>>>dates = timeSequence(from = "2005-12-31", to = "2006-12-31", format = >>>>>"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") >>>>> >>>>>I get: >>>>> >>>>> >>>>> >>>>>           >>>>> >>>>>>dates >>>>>> >>>>>> >>>>>>             >>>>>> >>>>>[1] "Europe/Warsaw" >>>>>[1] [2005-12-31] [2006-01-31] [2006-03-03] [2006-03-31] [2006-05-01] >>>>>[6] [2006-05-31] [2006-07-01] [2006-07-31] [2006-08-31] [2006-10-01] >>>>>[11] [2006-10-31] [2006-12-01] [2006-12-31] >>>>> >>>>>Unfourtunately, I would like to heave end of month at each point. >>>>>I thought, that maybe using this function would also help when trying >>>>>           >>>>> >>>to add >>>       >>> >>>>>a month to a date. I would like to have >>>>> >>>>>"2006-01-31" + 1M = "2006-02-28" >>>>> >>>>>in MS EXCEL I would use EDATE("2006-01-31";1), and that would work. I >>>>>couldn't find any similar function in R for that. Am I missing some >>>>>function? >>>>> >>>>>Best regards, >>>>>Wojtek >>>>> >>>>>      [[alternative HTML version deleted]] >>>>> >>>>>_______________________________________________ >>>>>[hidden email] mailing list >>>>>https://stat.ethz.ch/mailman/listinfo/r-sig-finance>>>>> >>>>> >>>>> >>>>>           >>>>> >>>>_______________________________________________ >>>>[hidden email] mailing list >>>>https://stat.ethz.ch/mailman/listinfo/r-sig-finance>>>> >>>> >>>> >>>>         >>>> >>>_______________________________________________ >>>[hidden email] mailing list >>>https://stat.ethz.ch/mailman/listinfo/r-sig-finance>>> >>>       >>> >>     >> > > [[alternative HTML version deleted]] > >_______________________________________________ >[hidden email] mailing list >https://stat.ethz.ch/mailman/listinfo/r-sig-finance> >   > _______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

 Well, thanks for the help, but not exactly. The function I would like to have would give results for starting dates charvec = c("2005-12-25", "2006-01-30") >function_name(charvec,+1M) [1] [2006-01-25] [2006-02-28] So it's adding one month to a date, but when it exceeds the last day of the next month, it gives the las day. The other way could be also useful: charvec = c("2005-12-25", "2006-02-28") >function_name(charvec,-1M) [1] [2005-11-25] [2006-01-31] #first date was decreased by one month, the second was decreased to the last day of january (not 28th January). Having such functions, one could set up proper dates for tenors in discount curve. In the function you published few days ago, you setup fixed year fractions for each tenor, which don't take into account holidays etc. Best regards, Wojtek 2006/2/5, Diethelm Wuertz <[hidden email]>: > > > Here comes a function which computes  time and date for the last Day > n-month ahead. > It is Rmetrics conform and preserves time zone, daylight saving and > Financial Centers. > > Is that what you wanted? > > DW > > > > timeLastDayNMonthAhead = > function(charvec, month, format = "%Y-%m-%d", FinCenter = "GMT") > { >    if (Sys.getenv("TZ")[[1]] != "GMT") warning("Set timezone to GMT!") >    if (FinCenter == "") FinCenter = "GMT" >    if (month < 0) stop("month must be positive") >    date = timeLastDayInMonth(charvec, format = format, FinCenter = > FinCenter) >    for (i in 1:month) date = timeLastDayInMonth(date, format = format, >        FinCenter = FinCenter) + 3600*24 > >    # Return Value: >    timeLastDayInMonth(date, format = format, FinCenter = FinCenter) > } > > # Example: > > timeLastDayNMonthAhead(c("2005-12-25", "2006-02-28"), month = 2) > [1] "GMT" > [1] [2006-02-28] [2006-04-30] > > > > > > Wojciech Slusarski wrote: > > >I thought a bit about the function below, and see a problem, when n<0 (I > >would like to decrease the date.s by one month). I still have no Idea how > to > >implement it. > > > >Best regards, > >Wojtek > > > > > >2006/2/5, Wojciech Slusarski <[hidden email]>: > > > > > >>Well, > >> > >>Thanks for the help, but I thought about something more general, that > >>could allow me adding n months to a date. I am sorry, that my question > >>wasn't so clear. If someone needed, here's the code: > >> > >> > >>EMONTH = > >>function(date.s, n) > >>{ > >>  #function adds 'n' months to 'date.s' > >>  dates = timeSequence(from = format(date.s@Data, "%Y-%m-%d"), > length.out= n+1, by = "month") > >>  if(atoms(date.s)[1,"d"]>28) > >>  { > >>      if(atoms(dates)[n+1,"d"]<4) > >>   { > >>      emonth = dates[n+1]-atoms(dates)[n+1,"d"]*24*3600 > >>   } else { > >>     emonth = dates[n+1] > >>   } > >>  } else { > >>    emonth = dates[n+1] > >>  } > >>  emonth > >>} > >> > >> > >> > >># test > >> > >>date.s = timeDate("2005-12-30") > >> > >> > >> > >>>EMONTH(date.s, 2)@Data > >>> > >>> > >>[1] "2006-02-28" > >>Best regards, > >>Wojtek > >> > >> > >>2006/2/5, Diethelm Wuertz <[hidden email]>: > >> > >> > >>>Gabor Grothendieck wrote: > >>> > >>> > >>> > >>>>Try this: > >>>> > >>>>library(fCalendar) > >>>>dates <- timeSequence(from = "2005-12-1", to = "2006-12-1", format = > >>>>"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") > >>>>dates <- timeLastDayInMonth(dates) > >>>> > >>>> > >>>> > >>>> > >>>Alternatively you can use > >>> > >>> > >>> > >>>>timeSequence(from = "2006-01-01", to = "2007-01-01", format = > >>>> > >>>> > >>>+ "%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") - 3600*24 > >>>[1] "Europe/Warsaw" > >>>[1] [2005-12-31] [2006-01-31] [2006-02-28] [2006-03-31] [2006-04-30] > >>>[6] [2006-05-31] [2006-06-30] [2006-07-31] [2006-08-31] [2006-09-30] > >>>[11] [2006-10-31] [2006-11-30] [2006-12-31] > >>> > >>>Please use proper ISO-8601 notation: 2006-01-05 and not 2006-1-5 ! > >>> > >>>DW > >>> > >>> > >>> > >>>>On 2/4/06, Wojciech Slusarski < [hidden email]> wrote: > >>>> > >>>> > >>>> > >>>> > >>>>>Dear R users, > >>>>> > >>>>>Could anyone help me with creating a monthly series of dates? > >>>>>When I try to do: > >>>>> > >>>>>dates = timeSequence(from = "2005-12-31", to = "2006-12-31", format = > >>>>>"%Y-%m-%d", by="month", FinCenter = "Europe/Warsaw") > >>>>> > >>>>>I get: > >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>>dates > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>[1] "Europe/Warsaw" > >>>>>[1] [2005-12-31] [2006-01-31] [2006-03-03] [2006-03-31] [2006-05-01] > >>>>>[6] [2006-05-31] [2006-07-01] [2006-07-31] [2006-08-31] [2006-10-01] > >>>>>[11] [2006-10-31] [2006-12-01] [2006-12-31] > >>>>> > >>>>>Unfourtunately, I would like to heave end of month at each point. > >>>>>I thought, that maybe using this function would also help when trying > >>>>> > >>>>> > >>>to add > >>> > >>> > >>>>>a month to a date. I would like to have > >>>>> > >>>>>"2006-01-31" + 1M = "2006-02-28" > >>>>> > >>>>>in MS EXCEL I would use EDATE("2006-01-31";1), and that would work. I > >>>>>couldn't find any similar function in R for that. Am I missing some > >>>>>function? > >>>>> > >>>>>Best regards, > >>>>>Wojtek > >>>>> > >>>>>      [[alternative HTML version deleted]] > >>>>> > >>>>>_______________________________________________ > >>>>>[hidden email] mailing list > >>>>>https://stat.ethz.ch/mailman/listinfo/r-sig-finance> >>>>> > >>>>> > >>>>> > >>>>> > >>>>> > >>>>_______________________________________________ > >>>>[hidden email] mailing list > >>>>https://stat.ethz.ch/mailman/listinfo/r-sig-finance> >>>> > >>>> > >>>> > >>>> > >>>> > >>>_______________________________________________ > >>>[hidden email] mailing list > >>>https://stat.ethz.ch/mailman/listinfo/r-sig-finance> >>> > >>> > >>> > >> > >> > > > >       [[alternative HTML version deleted]] > > > >_______________________________________________ > >[hidden email] mailing list > >https://stat.ethz.ch/mailman/listinfo/r-sig-finance> > > > > > > >         [[alternative HTML version deleted]] _______________________________________________ [hidden email] mailing list https://stat.ethz.ch/mailman/listinfo/r-sig-finance
Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

Open this post in threaded view
|
Report Content as Inappropriate

## Re: Problems with monthly sequences

Open this post in threaded view
|
Report Content as Inappropriate