我有两个栅格r
和r2
,我希望从r
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
中任何像素的值等于40
,则将r1
中的相应值替换(替换为)。
最后,我将r
的值40
替换为来自r1
这里的两个栅格是完全相同的,但我的数据不是 谢谢你的帮助
答案 0 :(得分:2)
这是一种方法。首先,找到r
中等于255
的值。其次,将这些值替换为r1
的相应值。
idx <- values(r) == 255
values(r)[idx] <- values(r1)[idx]
答案 1 :(得分:2)
在栅格中进行替换有两种常用方法。我在这里介绍两个:
> 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