[R] Help with vectors and rollapply

William Dunlap wdunlap at tibco.com
Tue Jul 10 18:22:17 CEST 2012


It looks like you already have the zoo package loaded so you can use its na.locf(),
which replaces NA's with the last non-NA value.  Convert the 0s to NAs with
replace() and feed the result into na.locf():
  a  <- c(-2,0,0,0,1,0,0,3,0,0,-4)
  aOut <- c(-2,-2,-2,-2,1,1,1,3,3,3,-4)
  na.locf(replace(a, a==0, NA) )
  #  [1] -2 -2 -2 -2  1  1  1  3  3  3 -4
  all.equal(aOut, .Last.value)
  # [1] TRUE

If you need to treat NA and 0 differently you will need to do more work.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
> Behalf Of Raghuraman Ramachandran
> Sent: Tuesday, July 10, 2012 8:23 AM
> To: r-help at r-project.org
> Subject: [R] Help with vectors and rollapply
> 
> Hello
> 
> I have a vector a =(-2,0,0,0,1,0,0,3,0,0,-4)
> 
> I want to replace all zeros into previous non-zero state. So for instance the above
> vector should be converted into:
> 
> a= (-2,-2,-2,-2,1,1,1,3,3,3,-4)
> 
> I tried many things and finally concluded that probably(?) rollapply may be the best
> way?
> 
> I tried
> f= function(x){
>                 ifelse(x==0,Lag(x),x)
> }
> 
> And then, rollappy(a,1,f) and that didn't work. Can someone help please?
> 
> Thx
> R
> 
> 
> Jefferies archives and monitors outgoing and incoming e-mail. The contents of this
> email, including any attachments, are confidential to the ordinary user of the email
> address to which it was addressed. If you are not the addressee of this email you may
> not copy, forward, disclose or otherwise use it or any part of it in any form
> whatsoever. Since the confidentiality of Internet e-mail cannot be guaranteed,
> please do not include private or confidential information (such as account numbers)
> or instructions requiring your authorization (such as orders or funds transfers) in your
> e-mail communication to us. This email may be produced at the request of regulators
> or in connection with civil litigation. Jefferies accepts no liability for any errors or
> omissions arising as a result of transmission. Although this transmission and any
> attachments are believed to be free of any virus or other defect that might affect any
> computer system into which it is received and opened, it is the!
>   responsibility of the recipient to ensure that it is virus free and no responsibility is
> accepted by Jefferies, its subsidiaries and affiliates, as applicable, for any loss or
> damage arising in any way from its use. In the United Kingdom, Jefferies operates as
> Jefferies International Limited; registered in England: no. 1978621; and Jefferies
> Bache Limited; registered in England: no. 114226; registered office for both: Vintners
> Place, 68 Upper Thames Street, London EC4V 3BJ. Jefferies International Limited and
> Jefferies Bache Limited are authorised and regulated by the Financial Services
> Authority. If you received this transmission in error, please immediately contact the
> sender and destroy the material in its entirety, whether in electronic or hard copy
> format. Thank you.
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> 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.



More information about the R-help mailing list