Thanks Roger. Again I learn about a new one: rle(). Though working, get 
to be a nice Sunday...

Cheers,

Patrick

Roger Bivand a écrit :
> On Sun, 26 Feb 2006, Patrick Giraudoux 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?
>>     
>
> I got as far as:
>
> rle.habs <- rle(habitats)
> habitats1 <- rep(make.names(rle.habs$values, unique=TRUE), rle.habs$lengths)
> aggregate(observations,by=list(habitats1),sum)
>
> making an extra habitats vector with a unique label for each run. 
>
> Since I don't know your seed, the results are not the same, but rle() is 
> quite good for runs.
>
> Roger
>
>   
>> 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]]


