2011-09-21 68 views
1

我有修改矩陣的問題。我設法根據另一個矩陣的值 改變矩陣中的值,當它們具有相同的維度時。但是現在我需要將這個過程應用於不同維度的矩陣。換句話說,我想根據 對較大矩陣的「區域」應用一些變化,但要記住我知道較大矩陣的位置與較大矩陣相關聯,即 。R根據另一個矩陣/數據幀修改矩陣/數據幀的區域

假設這是矩陣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)甲[B == I] = 0

,工程當A和B具有相同的維度。

我應該如何在矩陣A中進行替換?應用?一個for循環?

任何幫助將不勝感激,當然你可以指向我一些基本的閱讀,我還沒有讀過。

+0

算法如何知道在哪裏放置「空」區域?從計算機的角度來看,他可以向左或向右移動小矩陣。 –

+0

@RomanLuštrik嗨,我的數據是在一個地理柵格上,所以我有每個點的經緯度座標。所以我可以計算兩個矩陣中的哪一行和哪一列在同一個地理點 – pacomet

+1

我建議查看空間任務視圖。包'sp'有處理空間數據的類。 http://cran.r-project.org/web/views/Spatial.html你試圖實現的基本上是「掩蓋」。 –

回答

2

只需選擇子矩陣,做你想做的,即:

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

或者說,在一般情況下,如果[行,列]是矩陣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 

由於Andrie豪for hinting me the ncol function研究所醜陋的黯淡(A)[2] ... ...

+0

感謝Tomas,你的例子運行良好。這正是我需要的。明天在工作中,我會嘗試使用我的數據。 – pacomet