2015-08-21 4 views
0

У меня есть матрица (действительно, трехмерный массив), которую я хотел бы «порог» на основе значений в другой матрице (которая полностью бинаризована). Так, например,Индекс матрицы, основанный на значениях другой матрицы

set.seed(1234) 
M <- matrix(1:9, nrow=3, byrow=F) 
M 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 
set.seed(1234) 
N <- matrix(sample(c(0, 0, 1), 9, replace=T), nrow=3) 
N 
    [,1] [,2] [,3] 
[1,] 0 0 0 
[2,] 0 1 0 
[3,] 0 0 0 

Я хотел бы сохранить только значение в M, которые находятся в том же месте, где N равно 1; превратите остальные в 0. Выход должен быть:

M.thresh 
    [,1] [,2] [,3] 
[1,] 0 0 0 
[2,] 0 5 0 
[3,] 0 0 0 
+1

Я добавил 'set.seed' функцию для воспроизводимости. Исправьте желаемый результат для этих новых (и всегда одинаковых) матриц. – SabDeM

+2

'M.thresh <- ifelse (N! = 1,0, M)' – Heroka

+0

@Heroka Я думаю, мне нужна дополнительная доза кофе ... это было болезненно очевидное решение. Благодаря! –

ответ

1

Просто замените матричным индексированием.

N[N == 1] <- M[N == 1] 
N 
#  [,1] [,2] [,3] 
# [1,] 0 0 0 
# [2,] 0 5 0 
# [3,] 0 0 0 

Или replace(N, N == 1, M[N == 1])

Смежные вопросы