Guys, sorry to bother you again: I am running everything as before (see code below - before the line with a lot of ######). But now I am getting an error: Error in eval(expr, envir, enclos) : could not find function "na.locf" I also noticed that after I run the 3rd line from the bottom: "wk <- as.numeric(format(myframe$dates, "%Y.%W"))" - there are some weeks that end with .00 And then, after I run the 2nd line from the bottom: "is.na(wk) <- wk %% 1 == 0" those weeks turn into NAs. Whether I run the second line or not - I get the same error about it not finding the function "na.locf". Do you know what might be going on? Thanks a lot! Dimitri
### Creating a longer example data set: mydates<-rep(seq(as.Date("2008-12-29"), length = 500, by = "day"),2) myfactor<-c(rep("group.1",500),rep("group.2",500)) set.seed(123) myvalues<-runif(1000,0,1) myframe<-data.frame(dates=mydates,group=myfactor,value=myvalues) (myframe) dim(myframe) ## Removing same rows (dates) unsystematically: set.seed(123) removed.group1<-sample(1:500,size=150,replace=F) set.seed(456) removed.group2<-sample(501:1000,size=150,replace=F) to.remove<-c(removed.group1,removed.group2);length(to.remove) to.remove<-to.remove[order(to.remove)] myframe<-myframe[-to.remove,] (myframe) dim(myframe) names(myframe)# write.csv(myframe,file="x.test.csv",row.names=F) wk <- as.numeric(format(myframe$dates, "%Y.%W")) is.na(wk) <- wk %% 1 == 0 solution<-aggregate(value ~ group + na.locf(wk), myframe, FUN = sum) ############################################################### On Wed, Mar 30, 2011 at 5:25 PM, Henrique Dallazuanna <www...@gmail.com> wrote: > You're right: > > wk <- as.numeric(format(myframe$dates, "%Y.%W")) > is.na(wk) <- wk %% 1 == 0 > solution<-aggregate(value ~ group + na.locf(wk), myframe, FUN = sum) > > > On Wed, Mar 30, 2011 at 6:10 PM, Dimitri Liakhovitski > <dimitri.liakhovit...@gmail.com> wrote: >> Yes, zoo! That's what I forgot. It's great. >> Henrique, thanks a lot! One question: >> >> if the data are as I originally posted - then week numbered 52 is >> actually the very first week (it straddles 2008-2009). >> What if the data much longer (like in the code below - same as before, >> but more dates) so that we have more than 1 year to deal with. >> It looks like this code is lumping everything into 52 weeks. And my >> goal is to keep each week independent. If I have 2 years, then it >> should be 100+ weeks. Makes sense? >> Thank you! >> >> ### Creating a longer example data set: >> mydates<-rep(seq(as.Date("2008-12-29"), length = 500, by = "day"),2) >> myfactor<-c(rep("group.1",500),rep("group.2",500)) >> set.seed(123) >> myvalues<-runif(1000,0,1) >> myframe<-data.frame(dates=mydates,group=myfactor,value=myvalues) >> (myframe) >> dim(myframe) >> >> ## Removing same rows (dates) unsystematically: >> set.seed(123) >> removed.group1<-sample(1:500,size=150,replace=F) >> set.seed(456) >> removed.group2<-sample(501:1000,size=150,replace=F) >> to.remove<-c(removed.group1,removed.group2);length(to.remove) >> to.remove<-to.remove[order(to.remove)] >> myframe<-myframe[-to.remove,] >> (myframe) >> dim(myframe) >> names(myframe) >> >> library(zoo) >> wk <- as.numeric(format(myframe$dates, '%W')) >> is.na(wk) <- wk == 0 >> solution<-aggregate(value ~ group + na.locf(wk), myframe, FUN = sum) >> solution<-solution[order(solution$group),] >> write.csv(solution,file="test.csv",row.names=F) >> >> >> >> On Wed, Mar 30, 2011 at 4:45 PM, Henrique Dallazuanna <www...@gmail.com> >> wrote: >>> Try this: >>> >>> library(zoo) >>> wk <- as.numeric(format(myframe$dates, '%W')) >>> is.na(wk) <- wk == 0 >>> aggregate(value ~ group + na.locf(wk), myframe, FUN = sum) >>> >>> >>> >>> On Wed, Mar 30, 2011 at 4:35 PM, Dimitri Liakhovitski >>> <dimitri.liakhovit...@gmail.com> wrote: >>>> Henrique, this is great, thank you! >>>> >>>> It's almost what I was looking for! Only one small thing - it doesn't >>>> "merge" the results for weeks that "straddle" 2 years. In my example - >>>> last week of year 2008 and the very first week of 2009 are one week. >>>> Any way to "join them"? >>>> Asking because in reality I'll have many years and hundreds of groups >>>> - hence, it'll be hard to do it manually. >>>> >>>> >>>> BTW - does format(dates,"%Y.%W") always consider weeks as starting with >>>> Mondays? >>>> >>>> Thank you very much! >>>> Dimitri >>>> >>>> >>>> On Wed, Mar 30, 2011 at 2:55 PM, Henrique Dallazuanna <www...@gmail.com> >>>> wrote: >>>>> Try this: >>>>> >>>>> aggregate(value ~ group + format(dates, "%Y.%W"), myframe, FUN = sum) >>>>> >>>>> >>>>> On Wed, Mar 30, 2011 at 11:23 AM, Dimitri Liakhovitski >>>>> <dimitri.liakhovit...@gmail.com> wrote: >>>>>> Dear everybody, >>>>>> >>>>>> I have the following challenge. I have a data set with 2 subgroups, >>>>>> dates (days), and corresponding values (see example code below). >>>>>> Within each subgroup: I need to aggregate (sum) the values by week - >>>>>> for weeks that start on a Monday (for example, 2008-12-29 was a >>>>>> Monday). >>>>>> I find it difficult because I have missing dates in my data - so that >>>>>> sometimes I don't even have the date for some Mondays. So, I can't >>>>>> write a proper loop. >>>>>> I want my output to look something like this: >>>>>> group dates value >>>>>> group.1 2008-12-29 3.0937 >>>>>> group.1 2009-01-05 3.8833 >>>>>> group.1 2009-01-12 1.362 >>>>>> ... >>>>>> group.2 2008-12-29 2.250 >>>>>> group.2 2009-01-05 1.4057 >>>>>> group.2 2009-01-12 3.4411 >>>>>> ... >>>>>> >>>>>> Thanks a lot for your suggestions! The code is below: >>>>>> Dimitri >>>>>> >>>>>> ### Creating example data set: >>>>>> mydates<-rep(seq(as.Date("2008-12-29"), length = 43, by = "day"),2) >>>>>> myfactor<-c(rep("group.1",43),rep("group.2",43)) >>>>>> set.seed(123) >>>>>> myvalues<-runif(86,0,1) >>>>>> myframe<-data.frame(dates=mydates,group=myfactor,value=myvalues) >>>>>> (myframe) >>>>>> dim(myframe) >>>>>> >>>>>> ## Removing same rows (dates) unsystematically: >>>>>> set.seed(123) >>>>>> removed.group1<-sample(1:43,size=11,replace=F) >>>>>> set.seed(456) >>>>>> removed.group2<-sample(44:86,size=11,replace=F) >>>>>> to.remove<-c(removed.group1,removed.group2);length(to.remove) >>>>>> to.remove<-to.remove[order(to.remove)] >>>>>> myframe<-myframe[-to.remove,] >>>>>> (myframe) >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Dimitri Liakhovitski >>>>>> Ninah Consulting >>>>>> www.ninah.com >>>>>> >>>>>> ______________________________________________ >>>>>> 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. >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Henrique Dallazuanna >>>>> Curitiba-Paraná-Brasil >>>>> 25° 25' 40" S 49° 16' 22" O >>>>> >>>> >>>> >>>> >>>> -- >>>> Dimitri Liakhovitski >>>> Ninah Consulting >>>> www.ninah.com >>>> >>> >>> >>> >>> -- >>> Henrique Dallazuanna >>> Curitiba-Paraná-Brasil >>> 25° 25' 40" S 49° 16' 22" O >>> >> >> >> >> -- >> Dimitri Liakhovitski >> Ninah Consulting >> www.ninah.com >> > > > > -- > Henrique Dallazuanna > Curitiba-Paraná-Brasil > 25° 25' 40" S 49° 16' 22" O > -- Dimitri Liakhovitski Ninah Consulting www.ninah.com ______________________________________________ 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.