Hello, My direct desire is a good (fast) way to fill values forward until there is another value then fill that value foward in the data xx (at the bottom of this email). For example, from row 1 to row 45 should be NA (no change), but from row 46 row 136 the value should be 12649, and from row 137 to the next value should be 13039.00. The last line of code is all you need for this part.
If you are so inclined, my goal is this: I want to create a weekly time series out of some data based on the report date. The report date is 'rd' below, and is the correct date for the time series. My idea (in part seen below) is to align rd and ua via the incorrect date (the time series date), then merge that using the report date (rd) and a daily series (so I capture all of the dates) of dates (dt). That gets the data in the right start period. I've done all of this so far below and it looks fine. Then I plan to roll all of those values forward to the next value (see question above), then I'll do something like this: xx[weekdays(xx[,1]) == "Friday",] ...to get a weekly series of Friday values. I'm thinking someone probably has a faster way of doing this. I have to do this many times, so speed is important. Thanks! Here is what I have done so far: dt <- seq(from =as.Date("2009-06-01"), to = Sys.Date(), by = "day") > nms [1] "2009-06-30" "2009-09-30" "2009-12-31" "2010-03-31" "2010-06-30" "2010-09-30" "2010-12-31" "2011-03-31" "2011-06-30" "2011-09-30" [11] "2011-12-31" > rd 2009-06-30 2009-09-30 2009-12-31 2010-03-31 2010-06-30 2010-09-30 2010-12-31 2011-03-31 2011-06-30 2011-09-30 "2009-07-16" "2009-10-15" "2010-01-19" "2010-04-19" "2010-07-19" "2010-10-18" "2011-01-18" "2011-04-19" "2011-07-18" "2011-10-17" 2011-12-31 "2012-01-19" > ua 2009-06-30 2009-09-30 2009-12-31 2010-03-31 2010-06-30 2010-09-30 2010-12-31 2011-03-31 2011-06-30 2011-09-30 2011-12-31 12649.00 13039.00 13425.00 13731.00 14014.00 14389.00 14833.00 15095.00 15481.43 15846.43 16186.43 > x = merge(ua,rd,by='row.names') > names(x) = c('z.date','val','rt_date') > xx = merge(dt,x,by.y= 'rt_date',by.x=1,all.x=T) > xx x z.date val 1 2009-06-01 <NA> NA 2 2009-06-02 <NA> NA 3 2009-06-03 <NA> NA 4 2009-06-04 <NA> NA 5 2009-06-05 <NA> NA ...ect.... 36 2009-07-06 <NA> NA 37 2009-07-07 <NA> NA 38 2009-07-08 <NA> NA 39 2009-07-09 <NA> NA 40 2009-07-10 <NA> NA 41 2009-07-11 <NA> NA 42 2009-07-12 <NA> NA 43 2009-07-13 <NA> NA 44 2009-07-14 <NA> NA 45 2009-07-15 <NA> NA 46 2009-07-16 2009-06-30 12649 47 2009-07-17 <NA> NA 48 2009-07-18 <NA> NA 49 2009-07-19 <NA> NA 50 2009-07-20 <NA> NA 51 2009-07-21 <NA> NA 52 2009-07-22 <NA> NA 53 2009-07-23 <NA> NA 54 2009-07-24 <NA> NA 55 2009-07-25 <NA> NA 56 2009-07-26 <NA> NA 57 2009-07-27 <NA> NA 58 2009-07-28 <NA> NA ...ect.... 129 2009-10-07 <NA> NA 130 2009-10-08 <NA> NA 131 2009-10-09 <NA> NA 132 2009-10-10 <NA> NA 133 2009-10-11 <NA> NA 134 2009-10-12 <NA> NA 135 2009-10-13 <NA> NA 136 2009-10-14 <NA> NA 137 2009-10-15 2009-09-30 13039.00 138 2009-10-16 <NA> NA 139 2009-10-17 <NA> NA 140 2009-10-18 <NA> NA 141 2009-10-19 <NA> NA 142 2009-10-20 <NA> NA 143 2009-10-21 <NA> NA ...ect.... [[alternative HTML version deleted]] ______________________________________________ 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.