首页 > 解决方案 > 使用 R 中的 if 语句从栅格创建新栅格

问题描述

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

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

现在我想做以下事情:我想在第二个栅格层中搜索第一个栅格层中给定的值,并将所有其他值设置为 0。所以结果应该是一个栅格,只显示具有也可以找到的值的像素在第一个栅格中。

我认为使用正确的功能是if else function.

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

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

标签: rif-statementraster

解决方案


这是一些示例数据,以便您获得一个最小的自包含可重现示例。

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)

推荐阅读