Try this: library(zoo) # temp <- ... from post asking question
# create a day sequence, dt, with no missing days # and create a 0 width series with those times. # merge that with original series giving original # series plus a bunch of times having NA values. # Use na.locf to fill in those values with the last # non-missing so far. rng <- range(time(temp)) dt <- seq(rng[1], rng[2], "day") temp.m <- na.locf(merge(temp, zoo(, dt))) # create a lagged time scale and subtract the # lagged series from original dt.lag <- as.Date(as.yearmon(dt)+1/12) + as.numeric(format(dt, "%d")) - 1 temp - zoo(coredata(temp.m), dt.lag) Using your data the output from the last line is: > temp - zoo(coredata(temp.m), dt.lag) 2009-10-05 2009-10-06 2009-10-07 2009-10-08 2009-10-09 2009-10-13 2009-10-14 -5 -6 3 2 -2 2 1 On Wed, Oct 14, 2009 at 10:39 AM, Sergey Goriatchev <serg...@gmail.com> wrote: > Hello everyone. > > I have a specific problem that I have difficulties to solve. > Assume I have a zoo object: > > set.seed(12345) > data <- round(runif(27)*10+runif(27)*5, 0) > dates <- as.Date(c("09/03/09", "09/04/09", "09/07/09", "09/09/09", > "09/10/09", "09/11/09", "09/14/09", "09/16/09", "09/17/09", > "09/18/09", "09/21/09", "09/22/09", "09/23/09", > "09/24/09", "09/25/09", "09/28/09", "09/29/09", "09/30/09", > "10/01/09", "10/02/09", "10/05/09", "10/06/09", "10/07/09", > "10/08/09", "10/09/09", "10/13/09", "10/14/09"), "%m/%d/%y") > temp <- zoo(data, order.by=dates) > > What I need to do is to take differences between say October 14th and > September 14, then October 13th and September 13th, that is 1 month > difference independent of number of days inbetween. And when there is > no matching date in an earlier month, like here where there is no > September 13th, the date should be the first preceding date, that is > September 11th in this example. How can I do that? > > The above is just an example, my zoo object is very big and I need to > take differences between years, that is between October 14th, 2009 and > October 14th, 2008, then Oct.13, 2009 and Oct.13, 2008, and so on. > Also, the time index of my zoo object has format "10/14/09" (that is > Oct.14, 2009), and that is the format I need to operate with and do > not want to change. In the example I reformated just so that I can > create a zoo object. > > Could some friendly person please show me how to do such a calculation? > > Thank you in advance! > > Best, > Sergey > > ______________________________________________ > 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.