Jim, Gabor, William, Thanks very much. Works a treat. Cheers, Murali
-----Original Message----- From: William Dunlap [mailto:wdun...@tibco.com] Sent: 18 June 2009 18:27 To: MENON Murali; r-help@r-project.org Subject: RE: [R] Replace zeroes in vector with nearest non-zero value approx() almost does what you want, but you have to patch up its output to account for a possible initial run of 0's in the input: > x <- c(0, -1, -1, -1, 0, 0, 1, -1, 1, 0) y <- > approx(seq_along(x)[x!=0], x[x!=0], xout=seq_along(x), method="const", f=0, rule=2)$y > y [1] -1 -1 -1 -1 -1 -1 1 -1 1 1 Doing tricks with cumsum will do it more directly: f<-function(x){ i<-cumsum(x!=0) # indices to last non-zero value in x c(x[i==0], x[x!=0][i]) # x[i==0] is initial run of 0's, x[x!=0][i] gets the rest } > rbind(x,f(x)) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] x 0 -1 -1 -1 0 0 1 -1 1 0 0 -1 -1 -1 -1 -1 1 -1 1 1 If there are NA's in x you will have to add an NA test to the x!=0 and x==0 tests or replace the NA's by 0's before doing this. Bill Dunlap TIBCO Software Inc - Spotfire Division wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org > [mailto:r-help-boun...@r-project.org] On Behalf Of > murali.me...@fortisinvestments.com > Sent: Thursday, June 18, 2009 9:48 AM > To: r-help@r-project.org > Subject: [R] Replace zeroes in vector with nearest non-zero value > > 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 > and provide commented, minimal, self-contained, reproducible code. > ______________________________________________ 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.