2016-12-06 5 views
1

Я пытаюсь взять позиции «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 

Поступая ниже я получаю позиции столбцов 1с в м матрицы:

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

[1] 3 2 4 1 2 4 

Я попробовал несколько подходов, но я изо всех сил, чтобы заменить значения в K матрицу на основе строчные позиции матрицы m к 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

Мы можем преобразовать в НС с

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

Да, это правильно. Спасибо огромное! – Sam

+1

удивительно сжатый код..superb! –

1

Вы могли бы просто сделать это:

k[m==1] <- NA 
Смежные вопросы