Вот два примера, чтобы сделать это.
Первый тип функционального программирования:
x2$x <- Reduce(function(x,y){
if(is.na(y)) c(x,x[length(x)]) else c(x,y)},
as.numeric(x2$x.Close)
)
Другой является своего рода процедурным способом:
z <- x2$x.Close
z1 <- rle(c(is.na(z)))
z2 <- z1$lengths[z1$values==TRUE] +1
z3 <- z[!is.na(z)]
# in the case that first row is NA
if (is.na(z[1])) {
z3 <- c(NA, z3)
z2[1] <- z2[1]-1
}
# in the case that the last row is not NA
if (!is.na(z[length(z)])) z2 <- c(z2, 1)
z4 <- rep(z3, z2)
x2$x <- z4