首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中使用if语句从栅格创建新栅格

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

Stack Overflow用户
提问于 2020-04-23 16:44:12
回答 2查看 95关注 0票数 0

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

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

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

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

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

代码语言:javascript
复制
    if(raster1==raster2){
      raster3 <- 1
      }else{
      raster3 <- 0
      }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-24 03:18:13

当提出问题时,总是包含一些示例数据,以便您得到一个最小的、自包含的、可重复的示例。

代码语言:javascript
复制
library(raster)
s <- r <- raster(ncol=5, nrow=5)
values(r) <- rep(c(1,NA,1,NA,1), 5)
values(s) <- 1:25

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

代码语言:javascript
复制
x <- mask(s, r, updatevalue=0)

你也可以使用代数

代码语言:javascript
复制
y <- (!is.na(r)) * s

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

代码语言:javascript
复制
z <- raster:::.ifel(!is.na(r), s, 0)
票数 1
EN

Stack Overflow用户

发布于 2020-04-23 20:48:31

我找到了我问题的答案。如果有人有同样的问题:

代码语言:javascript
复制
    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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61382947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档