[R] distributing a value for a given month across the number of weeks in that month

Gabor Grothendieck ggrothendieck at gmail.com
Tue Jul 13 18:25:34 CEST 2010


On Tue, Jul 13, 2010 at 11:19 AM, Dimitri Liakhovitski
<dimitri.liakhovitski at gmail.com> wrote:
> Actually,
> I realized that my task was a bit more complicated as I have different
> (let's call them) Markets and the dates repeat themselves across
> markets. And the original code from Gabor gives an error - because
> dates repeate themselves and apparently zoo cannot handle it. So, I
> had to do program a way around it (below). It works.
> However, I am wondering if there is a shorter/more elegant way of doing it?
> Thank you!
> Dimitri
>
> ### My original data frame is a bit more complicated - dates repeat
> themselves for 2 markets:
> monthly<-data.frame(month=c(20100301,20100401,20100501,20100301,20100401,20100501),monthly.value=c(100,200,300,10,20,30),market=c("Market
> A","Market A", "Market A","Market B","Market B", "Market B"))
> monthly$month<-as.character(monthly$month)
> monthly$month<-as.Date(monthly$month,"%Y%m%d")
> (monthly)
>

Assuming the dates for each market are the same we split them into a
zoo object with one market per column and following the same approach
as last time we use by in place of ave.  The lines marked ## are same
as last time.
Be sure you are using zoo 1.6-4 from CRAN since it makes use of the
na.locf features added in that version.

> z <- read.zoo(monthly, split = "market")
> all.dates <- seq(start(z), as.Date(as.yearmon(end(z)), frac = 1), by = "day") ##
> mondays <- all.dates[weekdays(all.dates) == "Monday"] ##
> weeks <- na.locf(z, xout = mondays) ##
> do.call(rbind, by(weeks, as.yearmon(mondays),
+ function(x) zoo(x/nrow(x), rownames(x))))
           Market.A Market.B
2010-03-01       20        2
2010-03-08       20        2
2010-03-15       20        2
2010-03-22       20        2
2010-03-29       20        2
2010-04-05       50        5
2010-04-12       50        5
2010-04-19       50        5
2010-04-26       50        5
2010-05-03       60        6
2010-05-10       60        6
2010-05-17       60        6
2010-05-24       60        6
2010-05-31       60        6



More information about the R-help mailing list