[R] Processing dates and generating sequences of dates

From: Gavin Simpson <gavin.simpson_at_ucl.ac.uk>
Date: Mon, 04 Feb 2008 15:39:55 +0000


hits=-2.6 tests=BAYES_00
X-USF-Spam-Flag: NO

Dear List,

Say I have the following sequence of dates [*]:

start <- as.Date("2005-01-05", format = "%Y-%d-%m") end <- as.Date("2007-10-07", format = "%Y-%d-%m") my.dates <- seq(start, end, by = "days")

What I would like to generate is a sequence of dates, by month that goes from the first day of 2005 (the year of the start date) to the last day of 2007 (the year of the end date), so that the output is a vector of 36 dates containing all months of the three calendar years that the sampling spanned.

I could do it via manipulation of dates as so:

new.dates <- seq(as.Date(paste(format(min(my.dates), format = "%Y"), 

"1", "1", sep = "/")),
as.Date(paste(format(max(my.dates), format = "%Y"),
"12", "31", sep = "/")),
by = "months")

And then manipulate that to get only the month and year parts of the 36 generated dates.

This doesn't seem very elegant to me. Is there a better/easier way than converting back and forth between characters and objects of class "Date"?

Many thanks,

G

[*] FWIW, my actual application is similar to my.dates, but not sampled every day - indeed there are months where there are no samples - and I am trying to do a levelplot of the numbers of observations per month, per year. Given the following data

dat <- data.frame(temp = rnorm(length(my.dates)),

                  my.dates = my.dates)
dat$year <- as.numeric(format(dat$my.dates, format = "%Y"))
dat$month <- format(dat$my.dates, format = "%b")
dat$month <- factor(dat$month, levels = c("Jan","Feb","Mar","Apr",
                                          "May","Jun","Jul","Aug",
                                          "Sep","Oct","Nov","Dec"))

I can get a table of the number of observations per month per year via

(obs.yearmon <- with(dat, table(year, month)))

Which when converted to a vector provides what I need for levelplot()'s formula method. Now I just need to generate the sequence of 36 months ("Jan", "Feb" etc) and years to go with it. The matrix method of levelplot works, but I am having to hard code a lot of details that I believe the formula method will handle automagically for me.

-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%

______________________________________________
R-help_at_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.
Received on Mon 04 Feb 2008 - 15:42:35 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Mon 04 Feb 2008 - 16:30:12 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive