Skip to content

Code to fetch summary info from vector

8 messages · stephen sefick, William Dunlap, Jose Iparraguirre +4 more

#
Hi all,

Thanks in advance for any help.

I have a vector "b":

b=c(1,1,1,2,3,4,3,2,1,1,1,1,1,2,3,4,5,4,3.5,3,2,1,1,1)

Imagine b is river flow throughout time.

I would like some code that will generate the following information:

number of individual 'periods' where b>1 (= 2 in this case)
period 1 length = 5, max = 4
period 2 length = 8, max = 5

I can't figure anything useful out.

Thanks,
		
Ben Gillespie
Research Postgraduate
 
School of Geography
University of Leeds
Leeds
LS2 9JT
 
http://www.geog.leeds.ac.uk/
#
I don't know if I understand what you want.  What are the periods?  I 
suspect this is a time series.  What have you tried that didn't work?
kind regards,

Stephen
On 01/15/2013 10:16 AM, Benjamin Gillespie wrote:

  
    
#
I don't completely understand the  question, but if you are looking
for the lengths of the runs of values greater than 1 then rle() would
help:
  > b <- c(1,1,1,2,3,4,3,2,1,1,1,1,1,2,3,4,5,4,3.5,3,2,1,1,1)
  > r <- rle(b>1)
  > r
  Run Length Encoding
    lengths: int [1:5] 3 5 5 8 3
    values : logi [1:5] FALSE TRUE FALSE TRUE FALSE
  > r$lengths[r$values]
  [1] 5 8
To get the maximum of each run of values greater than one, something
like the following may do (there are more elegant ways, but I don't want
to spend the time on it until I know what the question is):
  > runNumber <- cumsum( c(b[1]>1, (b[-1]>1) & (b[-length(b)]<=1)) )
  > runNumber[b<=1] <- NA
  > tapply(b, runNumber, max)
  1 2 
  4 5

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com
#
Hi Ben

I'm not sure whether I understood correctly, but is it something like this?
[1] 4
[1] 4
[1] 13
[1] 9
Etc...

Jos?

Jos? Iparraguirre
Chief Economist
Age UK



-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Benjamin Gillespie
Sent: 15 January 2013 16:16
To: r-help at r-project.org
Subject: [R] Code to fetch summary info from vector

Hi all,

Thanks in advance for any help.

I have a vector "b":

b=c(1,1,1,2,3,4,3,2,1,1,1,1,1,2,3,4,5,4,3.5,3,2,1,1,1)

Imagine b is river flow throughout time.

I would like some code that will generate the following information:

number of individual 'periods' where b>1 (= 2 in this case)
period 1 length = 5, max = 4
period 2 length = 8, max = 5

I can't figure anything useful out.

Thanks,
		
Ben Gillespie
Research Postgraduate
 
School of Geography
University of Leeds
Leeds
LS2 9JT
 
http://www.geog.leeds.ac.uk/
______________________________________________
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.

Wrap Up and Run 10k is back! 

Also, new for 2013 ? 2km intergenerational walks at selected venues. So recruit a buddy, dust off the trainers and beat the winter blues by 
signing up now:

http://www.ageuk.org.uk/10k

                 Milton Keynes | Oxford | Sheffield | Crystal Palace | Exeter | Harewood House, Leeds | 
                                 Tatton Park, Cheshire | Southampton | Coventry



Age UK Improving later life

http://www.ageuk.org.uk


 

-------------------------------
Age UK is a registered charity and company limited by guarantee, (registered charity number 1128267, registered company number 6825798). 
Registered office: Tavis House, 1-6 Tavistock Square, London WC1H 9NA.

For the purposes of promoting Age UK Insurance, Age UK is an Appointed Representative of Age UK Enterprises Limited, Age UK is an Introducer 
Appointed Representative of JLT Benefit Solutions Limited and Simplyhealth Access for the purposes of introducing potential annuity and health 
cash plans customers respectively.  Age UK Enterprises Limited, JLT Benefit Solutions Limited and Simplyhealth Access are all authorised and 
regulated by the Financial Services Authority. 
------------------------------

This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are 
addressed. If you receive a message in error, please advise the sender and delete immediately.

Except where this email is sent in the usual course of our business, any opinions expressed in this email are those of the author and do not 
necessarily reflect the opinions of Age UK or its subsidiaries and associated companies. Age UK monitors all e-mail transmissions passing 
through its network and may block or modify mails which are deemed to be unsuitable.

Age Concern England (charity number 261794) and Help the Aged (charity number 272786) and their trading and other associated companies merged 
on 1st April 2009.  Together they have formed the Age UK Group, dedicated to improving the lives of people in later life.  The three national 
Age Concerns in Scotland, Northern Ireland and Wales have also merged with Help the Aged in these nations to form three registered charities: 
Age Scotland, Age NI, Age Cymru.
#
Maybe rle can help a little here

rle(b>1)

Run Length Encoding
  lengths: int [1:5] 3 5 5 8 3
  values : logi [1:5] FALSE TRUE FALSE TRUE FALSE

 r<-rle(b>1)

r$lengths[r$values]
[1] 5 8

# started for the maximum but need to go home now, sorry. Will continue tomorrow if noone else finishes it.
groups <- rep(1:length(r$lengths),r$lengths)
On 15.01.2013, at 17:16, Benjamin Gillespie wrote:

            
#
Thanks everyone,

I've used the code Will supplied - this worked well.

Thanks to all the others who contributed.

Ben Gillespie
Research Postgraduate

School of Geography
University of Leeds
Leeds
LS2 9JT

Tel: +44(0)113 34 33345
Mob: +44(0)770 868 7641
http://www.geog.leeds.ac.uk/
#
Hello,

Continuing Jessica's code, to get the maximum of each group just use

b <- c(1,1,1,2,3,4,3,2,1,1,1,1,1,2,3,4,5,4,3.5,3,2,1,1,1)
r <- rle(b > 1)
groups <- rep(1:length(r$lengths),r$lengths)

tapply(b, groups, FUN = max)

# To get just the groups where b > 1,

mx <- tapply(b, groups, FUN = max)
mx[mx > 1]

# And you can combine both like in

cbind(length = r$lengths[r$values], max = mx[mx > 1])


Hope this helps,

Rui Barradas
Em 15-01-2013 16:57, Jessica Streicher escreveu:
#
On Jan 15, 2013, at 8:16 AM, Benjamin Gillespie wrote:

            
Look at:

rle(b>1)
?rle

Should get you started.