考虑以下示例
before = matrix(c(1, 2, 3, NA, 4, 5, NA, NA, 1), ncol = 3)
after = matrix(c(1, 2, 3, 1, 4, 5, 1, 4, 1), ncol = 3)
前面的矩阵是我总是根据缺失值的位置来处理的矩阵,而后面的矩阵是我需要重复访问的矩阵。 有什么高效的日常吗?
你可以这样做:
before[is.na(before)] <- before[which(is.na(before))-nrow(before)]
如果每行有多个 NA,您可以使用循环:
while(any(is.na(before))){
before[is.na(before)] <- before[which(is.na(before))-nrow(before)]
}
> identical(before,after)
[1] TRUE
您可以从
na.locf()
逐行应用 {zoo}
(MARGIN = 1L
):
> before = matrix(c(1, 2, 3, NA, 4, 5, NA, NA, 1), ncol = 3)
> after = matrix(c(1, 2, 3, 1, 4, 5, 1, 4, 1), ncol = 3)
> (before2 = t(apply(before, 1L, zoo::na.locf)))
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 2 4 4
[3,] 3 5 1
> identical(before2, after)
[1] TRUE
阅读文档,其中实现了很多选项。 或者编写您自己的函数,请参阅此处。