2017-04-26 139 views
1

在光柵不同的土地覆蓋類我怎樣才能給出下面的例子中我的土地覆蓋類別1,2,3,4,5的總面積:計算區域中的R

library("raster") 
r <- raster(nrow=10, ncol=10) 
r<-setValues(r,c(rep(1,20),rep(2,20),rep(3,20),rep(4,20),rep(5,20))) 

一方法可能是基於這些值對柵格進行子集化處理,但是像a <- area(r[getValues(r)==1])這樣的一些例子也沒有工作,也沒有a <- area(r[r==1])

這個website提供了一個解決方案,但它需要爲每個要分析的值創建新的柵格圖層。我寧願不這樣做,因爲我的原始柵格包含許多不同的值,並且非常大。提出了類似的方法here,但它只適用於小區域。

回答

2

您可以在由r中的值分組的區域上使用基本函數aggregate並對它們進行求和。

aggregate(getValues(area(r, weights=FALSE)), by=list(getValues(r)), sum) 
    Group.1   x 
1  1 48166136 
2  2 126933351 
3  3 320336528 
+0

此方法考慮到緯度分辨率的差異,如果大面積映射? – joaoal

+0

我相信如此。您的示例代碼的座標有點奇怪,但它確實爲不同的網格框生成了不同的區域。 – G5W

+0

是的,它的確如此。爲了達到這個目的,我稍微編輯了我的示例代碼。如果您在回覆中更改結果將會很有幫助。謝謝。 – joaoal