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