Truncating dates (and other date-time manipulations)
I don't think that cut.Date helps because I want to make a new series, not divide up an existing one, similarly with to.period. as.yearmon,
Use cut.Date like this (assuming the dates variable as in your post): r <- as.Date(cut(range(dates), "month")) # every month seq(r[1], r[2]+32, "month")
Thanks for that hint:
floor.Date <- function(date, time) {
as.Date(cut(date, time))
}
ceiling.Date <- function(date, time) {
parts <- strsplit(time, " ")[[1]]
if (length(parts) == 1) {
mult <- 1
unit <- time
} else {
mult <- as.numeric(parts[[1]])
unit <- parts[[2]]
}
unit <- gsub("s$", "", unit)
up <- c("day" = 1, "week" = 7, "month" = 31, "year" = 365)
date <- date + mult * up[unit]
floor.Date(date, time)
}
which does what I want, I think - accepting all unit specifications
that seq.Date and cut.Date do. I guess I'll just include these
functions in ggplot2, even though it seems like there should be a more
suitable home for them.
as.yearqtr etc, might be helpful but I'd need to stitch them together myself and they don't return dates so I'd have to convert back for plotting. plot.zoo doesn't help because all the examples are regular
Also both yearmon and yearqtr can be used for plotting -- you don't have to convert them back to Dates just for plotting as zoo provides axis.yearmon and axis.yearqtr and furthermore there is no assumption of regular series needed. plot(as.yearmon(Sys.Date()) + c(0, 5, 7, 20)/12, 1:4)
I think you miss the point that this is for ggplot2, so that using plotting primitives from other packages is rather beside the point.
Although in all these examples you do have to combine several functions, if there were a function for every conceivable date manipulation there would be too large a number to remember and its better to have a good set of primitives that are sufficiently powerful that most operations can be done in one or two lines as shown above.
That's exactly what I'm arguing - I feel like your argument is the equivalent to saying that we don't need floor and ceiling for numbers because we have cut. Hadley