use na.locf in zoo:

> x
 [1]  0 -1 -1 -1  0  0  1 -1  1  0
> # replace 0 with NA so na.locf works
> is.na(x) <- x == 0
> x
 [1] NA -1 -1 -1 NA NA  1 -1  1 NA
> na.locf(x, na.rm=FALSE)
 [1] NA -1 -1 -1 -1 -1  1 -1  1  1
>

You can then go back and replace NAs with 0


On Thu, Jun 18, 2009 at 12:47 PM, <murali.me...@fortisinvestments.com>wrote:

> Folks,
>
> If I have a vector such as the following:
>
> x <- c(0, -1, -1, -1, 0, 0, 1, -1, 1, 0)
>
> and I want to replace the zeroes by the nearest non-zero number to the
> left, is there a more elegant way to do this than the following loop?
>
> y <- x
> for (i in 2 : length(x))
> {
>    if (y[i] == 0) {
>        y[i] <- y[i - 1]
>    }
> }
>
> > y
> [1]  0 -1 -1 -1 -1 -1  1 -1  1  1
>
> You can see the first zero is left as is, the next two zeroes become -1,
> which is the closest non-zero to the left of them, and the last zero
> becomes 1.
>
> Cheers,
> Murali
>
> ______________________________________________
> R-help@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<http://www.r-project.org/posting-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?

        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to