根据列位置更改矩阵中的值

时间:2016-12-06 12:51:31

标签: r matrix

我正试图取得' 1s'的位置。在m矩阵中,并使用这些位置将k矩阵中的值更改为NA。但经过多次尝试后我无法获得它。

m <- matrix(c(0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1), 
        nrow = 4, byrow = TRUE)
m

     [,1] [,2] [,3] [,4]
[1,]    0    0    0    1
[2,]    0    1    0    1
[3,]    1    0    0    0
[4,]    0    0    1    1


k <- matrix(c(12, 32, 12, 13, 23, 31, 23, 31, 23, 32, 67,63,61, 22,99, 34), 
        nrow = 4, byrow = TRUE)
k

     [,1] [,2] [,3] [,4]
[1,]   12   32   12   13
[2,]   23   31   23   31
[3,]   23   32   67   63
[4,]   61   22   99   34

通过以下操作,我得到m矩阵中1的列位置:

jj<- row(m)[m!=0]

[1] 3 2 4 1 2 4

我尝试了几种方法,但我很难根据m矩阵的行位置替换k矩阵中的值到NA。

我想要实现的目标如下:

     [,1] [,2] [,3] [,4]
[1,]   12   32   12   NA
[2,]   23   NA   23   NA
[3,]   NA   32   67   63
[4,]   61   22   NA   NA

2 个答案:

答案 0 :(得分:2)

我们可以用

转换为NA
NA^(m)*k
#     [,1] [,2] [,3] [,4]
#[1,]   12   32   12   NA
#[2,]   23   NA   23   NA
#[3,]   NA   32   67   63
#[4,]   61   22   NA   NA

或另一种选择是

is.na(k) <- m==1

replace

replace(k, m==1, NA)

答案 1 :(得分:1)

你可以这样做:

k[m==1] <- NA