使用 R 中的 if 语句从栅格创建新栅格

create new raster from raster using if statement in R

我有一个显示当前 SST 的栅格图层,但只显示我知道适合某个物种栖息地的像素。所有其他像素都设置为 NA。

现在我有了相同的栅格层,但显示了 2050 年的预测海温。在这个栅格层中,所有像素都有一个值(陆地表面的 NA 除外)。

现在我想执行以下操作:我想在第二个栅格图层中搜索第一个栅格图层中给定的值,并将所有其他值设置为 0。因此结果应该是一个仅显示具有值的像素的栅格也可以在第一个光栅中找到。

我认为正确的函数应该是if else function

有没有办法在 if else 函数中使用栅格的所有值?代码应该类似于以下内容:

    if(raster1==raster2){
      raster3 <- 1
      }else{
      raster3 <- 0
      }

我找到了问题的答案:

check <- raster2<maxValue(raster1)
raster_final <- check*raster2
raster_final_2 <- mask(raster2, check, maskvalue=0)
raster_final_3 <- crop(raster_final_2, raster1)
raster_final_4 <- mask(raster_final_3, raster1)

这里有一些示例数据,这样您就可以获得一个最小的独立的可重现示例。

library(raster)
s <- r <- raster(ncol=5, nrow=5)
values(r) <- rep(c(1,NA,1,NA,1), 5)
values(s) <- 1:25

你可以像这样做你想做的事(将 s 中的所有值,其中 r 是 NA,设置为 0)

x <- mask(s, r, updatevalue=0)

你也可以使用代数

y <- (!is.na(r)) * s

实际上有一个(隐藏的)ifel 方法,但效率较低

z <- raster:::.ifel(!is.na(r), s, 0)