r - 使用 R 中的 if 语句从栅格创建新栅格
问题描述
我有一个显示当前 SST 的栅格图层,但只显示我知道适合某个物种栖息地的像素。所有其他像素设置为 NA。
现在我有相同的栅格图层,但显示了 2050 年的预测 SST。在此栅格图层中,所有像素都有一个值(陆地表面上的 NA 除外)。
现在我想做以下事情:我想在第二个栅格层中搜索第一个栅格层中给定的值,并将所有其他值设置为 0。所以结果应该是一个栅格,只显示具有也可以找到的值的像素在第一个栅格中。
我认为使用正确的功能是if else function
.
有没有办法在 if else 函数中使用栅格的所有值?代码应该类似于以下内容:
if(raster1==raster2){
raster3 <- 1
}else{
raster3 <- 0
}
解决方案
这是一些示例数据,以便您获得一个最小的自包含可重现示例。
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)
推荐阅读
- angularjs - 在 VScode 中为 Angular JS 安装量角器
- python-3.x - 记录 getLogger 不输出
- service-worker - 在服务工作者中服务之前,我可以编辑缓存的 index.html 吗?
- html - 在电话应用程序中保持一致的左对齐
- react-native - 如何修复“_this2.setState 不是函数”
- c# - Microsoft graph:从组创建团队最初不会添加来宾
- javascript - 如何在会话存储中设置令牌一小时?
- typescript - 无法设置未定义的属性 ID
- php - 从 Laravel 5.7 升级到 Laravel 5.8 后自定义刀片指令不起作用
- azure - 如何在 Azure 中为静态网站配置 A 类型记录或 IP 地址