[R] Replace values in a vector

William Dunlap wdunlap at tibco.com
Thu Dec 3 18:06:32 CET 2009


> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Farida Mostajabi
> Sent: Thursday, December 03, 2009 8:41 AM
> To: r-help at 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 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