|
am<-matrix(c(1:7,12,13,NA,NA,5,NA,23),ncol=2)
colnames(am)<-c("id","num")
lessmax<-function(x,y) tail(x[x<=y],n=1) ##函数用来求最近非NA下标
lessmax<-Vectorize(lessmax,"y") ##对第二个参数向量化
ind.na<-which(is.na(am[,"num"])) ##num为NA的行下标
ind.nna<-which(!is.na(am[,"num"])) ##num不为NA的行下标
am ##原始的矩阵
id num
[1,] 1 12
[2,] 2 13
[3,] 3 NA
[4,] 4 NA
[5,] 5 5
[6,] 6 NA
[7,] 7 23
ind.na
[1] 3 4 6
ind.nna
[1] 1 2 5 7
am[is.na(am[,"num"]),"num"]<-am[lessmax(ind.nna,ind.na),"num"] ##替换
am ##替换后的矩阵
id num
[1,] 1 12
[2,] 2 13
[3,] 3 13
[4,] 4 13
[5,] 5 5
[6,] 6 5
[7,] 7 23
>
这样就可以了
|