Using zoo's yearmon class: library(zoo) my.dates[!duplicated(as.yearmon(my.dates))]
or, although you seem to disallow this in your question, this would be an option: my.dates[!duplicated(format(my.dates, "%Y-%m"))] On Feb 4, 2008 10:39 AM, Gavin Simpson <[EMAIL PROTECTED]> wrote: > 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@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.