2014-07-22 40 views
0

我有兩個光柵rr2,我想從r1如何替換兩個柵格(矩陣)之間的值?

library (raster) 
r <- raster(nrows=10, ncols=10) 
r <- setValues(r, 1:ncell(r)) 

r1 <- raster(nrows=10, ncols=10) 
r1 <- setValues(r1, 1:ncell(r)) 

替換r一些衣被合計如果r任何像素值等於40把從r1的對應(更換)值。 所以最後我會得到r與相應的值替換40值從r1

以及這裏的兩個柵格是相同的,但我的數據是不 感謝所有幫助

+0

是否要替換'r @ data @ values'中的值? –

回答

1

這裏是一個辦法。首先,找到r中的值等於255。其次,將這些值替換爲r1中的相應值。

idx <- values(r) == 255 
values(r)[idx] <- values(r1)[idx] 
+1

@我想,沒有辦法可以快得多。 –

1

有兩種常見方法可以在柵格中進行替換。在這裏,我廓二:

> library(raster) 
> rm(list=ls()) 
> r = raster('G:\\Faculty\\Mann\\Projects\\India_Index_Insurance\\Data\\India\\MOD13Q1_2002193_h24v05.250m_16_days_EVI.tif') 
> r1 = raster('G:\\Faculty\\Mann\\Projects\\India_Index_Insurance\\Data\\India\\MOD13Q1_2002193_h24v05.250m_16_days_EVI.tif') 
> 
> ptm <- proc.time() 
> idx <- values(r) <=0 
> values(r)[idx] <- values(r1)[idx] 
> proc.time() - ptm 
    user system elapsed 
    2.76 0.73 7.19 
> 
> r = raster('G:\\Faculty\\Mann\\Projects\\India_Index_Insurance\\Data\\India\\MOD13Q1_2002193_h24v05.250m_16_days_EVI.tif') 
> r1 = raster('G:\\Faculty\\Mann\\Projects\\India_Index_Insurance\\Data\\India\\MOD13Q1_2002193_h24v05.250m_16_days_EVI.tif') 
> 
> ptm <- proc.time() 
> index = r<=0 
> r[index]=r1[index] 
> proc.time() - ptm 
    user system elapsed 
    5.44 0.89 9.20 

如果運行在rasterstack或大量小柵格的這種操作我建議學習的foreach%dopar%並行代碼。暗角位置:https://cran.r-project.org/web/packages/foreach/vignettes/foreach.pdf

如果你是在一個或兩個非常大的柵格運行它(運行到內存限制),你應該閱讀的小插曲上處理大型柵格:https://cran.r-project.org/web/packages/raster/vignettes/functions.pdf

對於R數據類型的詳細討論(並解釋爲什麼有些事情是如此緩慢),請參閱Hadley Wickam的網站http://adv-r.had.co.nz/,特別是:http://adv-r.had.co.nz/Performance.html#implementation-performance