如何在两个栅格(矩阵)之间替换值?

时间:2014-07-22 12:43:51

标签: r raster

我有两个栅格rr2,我希望从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

的相应值

这里的两个栅格是完全相同的,但我的数据不是 谢谢你的帮助

2 个答案:

答案 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