Excellent! I was messing with this problem since the early afternoon. Actually the discrepancy you noticed remaining comes from negative difference in
diff(as.numeric(transect[,2])) One can work it around using abs(diff(as.numeric(transect[,2]))). This makes: runno <- cumsum(c(TRUE, abs(diff(as.numeric(transect[,2])))!=0)) aggregate(transect[,1], list(obs = transect[,2], runno = runno), sum) I did not know about this use of diff, which was the key point... and then cumsum for polishing. Really great and also elegant (concise). I like it! Thanks a lot!!! Cheers, Patrick Gabor Grothendieck a écrit : > Create another variable that gives the run number and aggregate on > both the habitat and run number removing the run number after > aggregating: > > runno <- cumsum(c(TRUE, diff(as.numeric(transect[,2])) !=0)) > aggregate(transect[,1], list(obs = transect[,2], runno = runno), sum)[,-2] > > This does not give the same as your example but I think there are some > errors in your example output. > > On 2/26/06, Patrick Giraudoux <[EMAIL PROTECTED]> wrote: > >> Dear All, >> >> I would like to make partial sums (or means or any other function) of >> the values in intervals along a sequence (spatial transect) where groups >> are defined. >> >> For instance: >> >> habitats<-rep(c("meadow","forest","meadow","pasture"),c(10,5,12,6)) >> observations<-rpois(length(habitats),2) >> transect<-data.frame(observations=observations,habitats=habitats) >> >> aggregate() is not suitable for my purpose because I want a result >> respecting the order of the habitats encountered although they may have >> the same name (and not pooling each group on each level of the factor >> created). For instance, the output of the ideal function >> mynicefunction() would be something as: >> >> mynicefunction(transect$observations, by=list(transect$habitats),sum) >> meadow 16 >> forest 9 >> meadow 21 >> pasture 17 >> >> and not >> >> aggregate(transect$observations,by=list(transect$habitats),sum) >> Group.1 x >> 1 forest 9 >> 2 meadow 37 >> 3 pasture 17 >> >> Did anybody hear about such a function already written in R? If no, any >> idea to make it simple and elegant to write? >> >> Cheers, >> >> Patrick Giraudoux >> >> ______________________________________________ >> R-help@stat.math.ethz.ch mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >> >> > > [[alternative HTML version deleted]]
______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html