In R I have two vectors such as
2 NA NA  1 NA NA
1 NA  2 NA NA NA
And I would like them to be like
2 2 2 1 1 1
1 1 2 2 2 2
Any ideas?
With tidyverse:
 read.table(text="2 NA NA  1 NA NA
                  1 NA  2 NA NA NA")%>%
    t()%>%
   data.frame()%>%
   mutate_all(funs(as.numeric(.)))%>%
   fill(c(X1,X2))%>%t
   [,1] [,2] [,3] [,4] [,5] [,6]
X1    2    2    2    1    1    1
X2    1    1    2    2    2    2
 
    
    vectors:
a <- c(2, NA, NA,  1, NA, NA)
b <- c(1, NA,  2, NA, NA, NA)
As anonymous function:
(function(x) {
    nai <- which(is.na(x))
    i <- which(!is.na(x))
    x[nai] <- x[i][findInterval(nai,i)]
    return(x)
 })
Call:
    (function(x) {
        nai <- which(is.na(x))
        i <- which(!is.na(x))
        x[nai] <- x[i][findInterval(nai,i)]
        return(x)
     })(a)
#[1] 2 2 2 1 1 1
    (function(x) {
        nai <- which(is.na(x))
        i <- which(!is.na(x))
        x[nai] <- x[i][findInterval(nai,i)]
        return(x)
     })(b)
#[1] 1 1 2 2 2 2
