2014-01-13 37 views
0

which.max函數I有兩個光柵與數據如下:修改中的R

library("raster") 
mdata <- raster(matrix(c(0,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE)) 
ndata <- raster(matrix(c(0,1,2, 11,14,13), nrow = 2, ncol = 3, byrow = TRUE)) 

欲堆疊起來,並估計與該標準的最大位置,如果這兩個光柵具有0值時,我應該能夠寫入0.這意味着在這種情況下輸出柵格/矩陣應該有0,1或2。

我嘗試了下面的代碼,但它並沒有完全按照我想要的方式執行。

odata <- stack(mdata, ndata) 
e <- which.max(odata) 

我應該如何引入檢查兩個矩陣的值是否爲0的標準,如果存在,則分配0?

我真的很感謝你對此的反饋。謝謝!

+0

PLease定義「最大位置」,並提供輸出樣本輸出矩陣(零點,一點和二點)的示例。否則,只需設置'summat <-sum(mdata,ndata)'並檢查值爲零的值就足夠了。 –

+0

用給定的矩陣mdata和ndata以上,which.max(odata)會給我一個矩陣(c(1,1,1,1,2,1))。 2在這種情況下指示第二光柵(即,ndata)對於[2,2]位置具有較高的值。如果兩個矩陣具有相同的值,則將輸出矩陣分配爲1,即,第一矩陣的位置。我想要得到矩陣值爲c(0,1,1,1,2,1)的結果。這基本上類似於我已經通過which.max函數獲得的結果,除了我想爲兩個矩陣分配具有0的單元格以及0不與1。 –

+0

我試圖在逐個單元格基礎上確定位置在一組柵格中具有最大值的柵格。如果我只有兩個柵格,你的解決方案似乎工作。但是,我有27個柵格進行比較,並創建一個光柵,其中柵格的位置在27個柵格中具有最大值。所以,我試圖堆疊柵格圖層,並使用which.max函數來部分滿足我的目標。我只是無法弄清楚如何滿足條件,如果所有柵格在相同位置都有0,我需要分配0。 –

回答

0

如何:

Rgames> foo<-matrix(rep(1,6),nr=2,nc=3) 
Rgames> foo 
    [,1] [,2] [,3] 
[1,] 1 1 1 
[2,] 1 1 1 
Rgames> foo[(ndata-mdata >0)] <-2 
Rgames> foo[(mdata==0 & ndata==0)] <-0 

Rgames> foo 
    [,1] [,2] [,3] 
[1,] 0 1 1 
[2,] 1 2 1 

我仍然無法從你的問題告訴你是否要找到最大的mdata或所有位置,其中mdata>ndata,但如果你澄清,很容易修改的條件語句匹配。

編輯:討論擴展到N柵格圖層。 要找到哪個圖層在每個位置都有最大值,我可以使用array

cube <- array(c(data.1,data.2,...),dim=c(dim(data.1),N)) #for N layers 

# and I apologize but I may have loaded this 3-D cube in the wrong order 
maxvals<-array(dim=dim(data.1)) 
for (j in 1:dim(data.1)[1]) { 
for (k in 1:dim(data.1)[2]) { 
maxvals[j,k]<-which.max(cube[j,k,]) 
if(sum(cube[j,k,])==0) maxvals[j,k] <- 0 
} 
} 

這或許可以更有效地做了許多工作aggregateplyr工具,但我希望這指明瞭方向。

+0

感謝Carl提供的解決方案。實際上,我最終創建了一個全零的矩陣,並在堆疊時保留它。例如。 odata < - stack(zeromatrix,mdata,ndata);並使用e < - which.max(odata)。這種方式的作用是每當所有柵格都爲零時,它會自動將它分配給1,因爲它首先出現,依此類推。通過這種方式,我得到了具有更高值的柵格位置的矩陣。然後我重新命名矩陣的值爲1:3到0:2。它完美運作。再次感謝幫助我。 –