> -----Original Message----- > From: r-help-boun...@r-project.org > [mailto:r-help-boun...@r-project.org] On Behalf Of Farida Mostajabi > Sent: Thursday, December 03, 2009 8:41 AM > To: r-help@r-project.org > Subject: [R] Replace values in a vector > > Hi all, > > I have a vector like this: > > x<- c(0.7, 0.1, 0, 0.2, 0.2, 0, 0, 0 , 0, 0.4, 0, 0.8, 1.8) > > I would like to replace the zero values with the first > previous non zero value. > > my returning vector should look like this: > > y<-c( 0.7, 0.1, 0.1,0.2,0.2,0.2,0.2,0.2, 0.4, 0.4, 0.8, 1.8)
y is shorter than x. Shouldn't there be a run of 6 0.2s, not 5? > How can I do this in R without using for loop? One way is > isNotZero <- function(x) !is.na(x) & x!=0 > f<-function(x)x[cummax(seq_along(x) * isNotZero(x))] > f(x) [1] 0.7 0.1 0.1 0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.8 1.8 This one drops an initial run of 0's but could be adjusted to do something with them. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > Thank you > > ______________________________________________ > 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.