0

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?

Oscar
  • 407
  • 6
  • 16

2 Answers2

0

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
jyjek
  • 2,627
  • 11
  • 23
0

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
Andre Elrico
  • 10,956
  • 6
  • 50
  • 69