用某些值替换矩阵的NA

时间:2016-07-19 17:17:15

标签: r matrix max fill

我有这个矩阵:

mat=matrix(c(1,1,1,2,2,2,3,4,NA,
                 4,4,4,4,4,3,5,6,4,
                 3,3,5,5,6,8,0,9,NA,
                 1,1,1,1,1,4,5,6,1),nrow=4,byrow=TRUE)
    print(mat)

        #      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
        # [1,]    1    1    1    2    2    2    3    4   NA
        # [2,]    4    4    4    4    4    3    5    6    4
        # [3,]    3    3    5    5    6    8    0    9   NA
        # [4,]    1    1    1    1    1    4    5    6    1

我应该用其他值替换NA值,这样: 我有另一个矩阵:

mat2=matrix(c(24,1,3,2, 4,4,4,4, 3,2,2,5, 1,3,5,1),nrow=4,byrow=TRUE)

     [,1] [,2] [,3] [,4]
[1,]   24    1    3    2
[2,]    4    4    4    4
[3,]    3    2    2    5
[4,]    1    3    5    1

以及带有第一个矩阵的NA行的索引的子集" mat":

subset=c(1,3)

我想用矩阵的NA代替具有最大值的行的值的名称。

在这种情况下,我将拥有" 1"对于第一行和" 4"对于第三个,我不关心第2行和第4行。

2 个答案:

答案 0 :(得分:1)

使用此

mat[subset,9] <- apply(mat2[subset,],1,which.max)

答案 1 :(得分:0)

mat[which(is.na(mat))] <- apply(mat2,1,max)[which(is.na(mat), arr.ind = T)[1,]]

这应该用mat2中同一行的最大值替换每个NA值。我没有一个开放的核心来调试,所以我希望这有效。如果您有任何问题或崩溃只是评论。