Yes right. Checking some examples, all come out OK.

>> same as your example but I think there are some errors in your example 
>> output.
Simply the 'errors' observed come simply from the seed in

rpois(length(habitats),2)

It is unlikely it is the same on your and my computer...

Cheers,

Patrick


Gabor Grothendieck a écrit :
> We are just comparing the difference to 0 so it does not matter if its 
> positive
> or negative.  All that matters is whether its 0 or not.
>
> In fact, the runno you calculate with the abs is identical to the one
> I posted without the abs:
>
> runno <- cumsum(c(TRUE, abs(diff(as.numeric(transect[,2])))!=0))
> runno2 <- cumsum(c(TRUE, diff(as.numeric(transect[,2])))!=0)
> identical(runno, runno2)  # TRUE
>
>
> On 2/26/06, Patrick Giraudoux <[EMAIL PROTECTED]> wrote:
>   
>> 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

Reply via email to