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
> 
这样就可以了