R Изменение области матрицы / кадра данных в зависимости от другой матрицы / кадра данных - PullRequest
1 голос
/ 21 сентября 2011

У меня есть вопрос об изменении матрицы. Мне удалось изменить значения в матрице в зависимости от значения другой матрицы, когда они имеют одинаковое измерение. Но теперь мне нужно применить эту процедуру к матрицам с разные размеры. Другими словами, я хочу применить некоторые изменения к «области» большей матрицы в зависимости на значениях меньшего, имея в виду, что я знаю позиции меньшего матрицы, связанной к большему.

Предположим, что это матрица A

1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 8 

и B

 0 0 0 0 0 0 
 0 1 1 1 1 0 
 0 0 1 1 1 0 
 0 0 1 1 0 0 
 0 0 0 0 0 0 

Я знаю, что B [1,1] - это значение, которое я должен проверить, чтобы изменить A [2,1], B [2,1] для A [3,1] и так далее ...

Окончательный результат, который я ищу, это

1 2 3 4 5 6 7 8 
1 2 0 0 0 0 7 8 
1 2 3 0 0 0 7 8 
1 2 3 0 0 6 7 8 
1 2 3 4 5 6 7 8 

Для замены значений A я использую цикл for в моем исходном скрипте

для (i в 1:10) A [B == i] = 0

, который работает, когда A и B имеют одинаковое измерение.

Как мне сделать замену в матрице А? применять? цикл a?

Буду признателен за любую помощь, и, конечно, вы можете указать мне некоторые базовые материалы, которые я до сих пор не прочитал.

1 Ответ

2 голосов
/ 21 сентября 2011

Просто выберите подматрицу и сделайте то, что вы хотите, то есть:

A[1:5,2:8][B == 1] = 0

Или, вообще, если [row, col] является начальной позицией матрицы B в матрице A:

A[row:nrow(A),col:ncol(A)][B == 1] = 0

Вот тестовый код, чтобы вы могли проверить, работает ли он:

A = matrix(rep(1:8, each = 5), nrow = 5)
B = matrix(c(rep(0, 7), 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, rep(0, 8)), nrow = 5, byrow = TRUE)
A[1:5,2:8][B == 1] = 0

Спасибо Андри Хо за подсказку мне ncol функции вместо уродливого затемнения (A) [2] ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...