HI,
May be this helps:
a1 <-a

indx <- which(c(0,diff(a!=0)) <0)
indx1 <- which(c(0,diff(a!=0)) >0)
a[a==0] <- rep( rowMeans(cbind(a[indx-1],a[indx1])),indx1-indx)
 a
# [1] 0.97210 0.97220 0.97300 0.97230 0.97145 0.97145 0.97145 0.97060 0.96980
#[10] 0.97040 0.97100 0.96990

#Another option is na.approx() from library(zoo)
 a1[a1==0] <- NA


 na.approx(a1)  ##there is difference in the result though (depends on what you 
want)
 [1] 0.972100 0.972200 0.973000 0.972300 0.971875 0.971450 0.971025 0.970600
 [9] 0.969800 0.970400 0.971000 0.969900
A.K.

Dear all, 

 My data is : 

a <- c(0.9721,0.9722,0.9730,0.9723,0.0,0.0,0.0,0.9706,0.9698,0.0,0.9710,0.9699) 

I want to replace zeros with  average of before and after values
 of them.  But sometimes there is one zero sometimes more than one. What
 is the most elegant way to do this ? 
Thanks a lot 


______________________________________________
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