Re: [R] Max consecutive increase in sequence

From: Phil Spector <spector_at_stat.berkeley.edu>
Date: Tue, 13 May 2008 20:30:08 -0700 (PDT)

I believe the original poster was looking for runs of consecutive values. Here's a generalization of Tony's solution:

findlong = function(seq){

     rr = rle(seq)
     lens = rr$length
     lens[rr$value == FALSE] = 0
     ll = which.max(lens)
     start = cumsum(c(1,rr$length))[ll]
     list(start=start,length=rr$lengths[ll])
}

> sq <- c(1, 2, 3, 4, 4, 4, 5, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1)

Then

> findlong(diff(sq) == 1) # starts at position 1, run of 3
$start
[1] 1

$length
[1] 3

> findlong(diff(sq) == -1) # starts at position 8, run of 5
$start
[1] 8

$length
[1] 5

On Tue, 13 May 2008, Tony Plate wrote:

> If the increases or decreases could be any size, rle(sign(diff(x))) could do
> it:
>
>> x <- c(1, 2, 3, 4, 4, 4, 5, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1)
>> r <- rle(sign(diff(x)))
>> r
> Run Length Encoding
> lengths: int [1:5] 3 2 2 5 4
> values : num [1:5] 1 0 1 -1 0
>> i1 <- which(r$lengths==max(r$lengths[r$values==1]) & r$values==1)[1]
>> i2 <- which(r$lengths==max(r$lengths[r$values==-1]) & r$values==-1)[1]
>> i1
> [1] 1
>> i2
> [1] 4
>> rbind(up=c(start=cumsum(c(1, r$lengths))[i1], len=r$lengths[i1]),
> down=c(start=cumsum(c(1, r$lengths))[i2], len=r$lengths[i2]))
> start len
> up 1 3
> down 8 5
>>
>
> Ingmar Visser wrote:
>> rle(diff(sq)) could be helpful here,
>> best, Ingmar
>>
>> On May 13, 2008, at 11:19 PM, Marko Milicic wrote:
>>
>>> Hi all R helpers,
>>>
>>> I'm trying to comeup with nice and elegant way of "detecting" consecutive
>>> increases/decreases in the sequence of numbers. I'm trying with
>>> combination
>>> of which() and diff() functions but unsuccesifuly.
>>>
>>> For example:
>>>
>>> sq <- c(1, 2, 3, 4, 4, 4, 5, 6, 5, 4, 3, 2, 1, 1, 1, 1, 1);
>>>
>>> I'd like to find way to calculate
>>>
>>> a) maximum consecutive increase = 3 (from 1 to 4)
>>> b) maximum consecutive decrease = 5 (from 6 to 1)
>>>
>>> All ideas are highly welcomed!
>>>
>>>
>>>
>>>
>>>
>>> --
>>> This e-mail and any files transmitted with it are confid...{{dropped:14}}
>>>
>>> ______________________________________________
>>> R-help_at_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.
>>
>> ______________________________________________
>> R-help_at_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.
>>
>
> ______________________________________________
> R-help_at_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.
>



R-help_at_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. Received on Wed 14 May 2008 - 06:03:05 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 14 May 2008 - 07:30:40 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive