如何在一个矩阵中找到NA值的索引并从R中的另一个矩阵中删除这些索引?

时间:2017-09-26 11:00:54

标签: r matrix na

我有2个矩阵(8760,318)。

A = 1 2 3 4 
    5 6 7 8 
    9 0 1 11
    1 8 3 7

B = NA NA NA NA
    NA NA NA NA
    1  3  5  7
    2  4  6  8

我想在矩阵B中找到NA值的索引,并删除矩阵A和矩阵B中与这些索引相对应的值。最后我想要

A = 9 0 1 11
    1 8 3 7

B = 1 3 5 7
    2 4 6 8

我也想保护矩阵形式(x,318)。到目前为止我尝试的所有方法都打破了矩阵形式并给了我一行1行。

3 个答案:

答案 0 :(得分:0)

对于A(有点hacky,也许我会编辑)

A[!is.na(B)[,1],]

对于B

na.omit(B)

答案 1 :(得分:0)

如何将NA A中的所有值放入B中的NA并将na.omit()应用于A?

for (i in 1:nrow(B)) { for (j in 1:ncol(B)) { if (is.na(B[i,j])) A[i,j] = NA } }

na.omit(A)

答案 2 :(得分:0)

我建议先转换为数据框。

A <- as.data.frame(A)
# 'data.frame':   4 obs. of  4 variables:
 # $ V1: num  1 5 9 1
 # $ V2: num  2 6 0 8
 # $ V3: num  3 7 1 3
 # $ V4: num  4 8 11 7

B <- as.data.frame(B)

使用以下内容过滤掉所有条目均为NA的行。这也确保您不会得到许多无法格式化为类似表格的结构的元素

isrowallna <- apply(B, 1, function(x) all(is.na(x)))

适当过滤数据框

A <- A[!isrowallna,]
B <- B[!isrowallna,]

恢复矩阵

A <- as.matrix(A)
 # num [1:2, 1:4] 9 1 0 8 1 3 11 7
 # - attr(*, "dimnames")=List of 2
  # ..$ : chr [1:2] "3" "4"
  # ..$ : chr [1:4] "V1" "V2" "V3" "V4"

B <- as.matrix(B)

您的数据

A = matrix(c(1, 2, 3, 4, 
    5, 6, 7, 8, 
    9, 0, 1, 11,
    1, 8, 3, 7), nrow=4, byrow=TRUE)

B = matrix(c(NA, NA, NA, NA,
    NA, NA, NA, NA,
    1,  3,  5,  7,
    2,  4,  6,  8), nrow=4, byrow=TRUE)