使用同一行中的先前值填充 R 矩阵中的缺失值

问题描述 投票:0回答:2

考虑以下示例

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)

前面的矩阵是我总是根据缺失值的位置来处理的矩阵,而后面的矩阵是我需要重复访问的矩阵。 有什么高效的日常吗?

r matrix missing-data fillna
2个回答
0
投票

你可以这样做:

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

0
投票

您可以从

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

阅读文档,其中实现了很多选项。 或者编写您自己的函数,请参阅此处

© www.soinside.com 2019 - 2024. All rights reserved.