# [R] Help with vectors and rollapply

Raghuraman Ramachandran rramachandran at jefferies.com
Wed Jul 11 10:05:09 CEST 2012

```Hi Bill

Cheers
R

-----Original Message-----
From: William Dunlap [mailto:wdunlap at tibco.com]
Sent: 10 July 2012 17:22
To: Raghuraman Ramachandran; r-help at r-project.org
Subject: RE: Help with vectors and rollapply

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