我有两个栅格,数据如下:
library("raster")
mdata <- raster(matrix(c(0,2,3, 11,12,13), nrow = 2, ncol = 3, byrow = TRUE))
ndata <- raster(matrix(c(0,1,2, 11,14,13), nrow = 2, ncol = 3, byrow = TRUE))
我想堆叠它们并估计最大位置,条件是如果栅格的值都为0,我应该可以写0.这意味着输出栅格/矩阵应该有0,1或2在这种情况下。
我尝试了以下代码,但它的执行方式与我想要的完全不同。
odata <- stack(mdata, ndata)
e <- which.max(odata)
我应该如何引入检查两个矩阵的相同位置的值是否为0并且如果存在则分配0的标准?
我非常感谢您对此的反馈。谢谢!
答案 0 :(得分:0)
这个怎么样:
Rgames> foo<-matrix(rep(1,6),nr=2,nc=3)
Rgames> foo
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
Rgames> foo[(ndata-mdata >0)] <-2
Rgames> foo[(mdata==0 & ndata==0)] <-0
Rgames> foo
[,1] [,2] [,3]
[1,] 0 1 1
[2,] 1 2 1
我仍然无法从您的问题中找出您是否要找到mdata
的最大值或mdata>ndata
的所有位置,但是如果您澄清可以轻松修改条件以匹配。< / p>
编辑:讨论扩展到栅格的N
层。
要查找每个位置具有最大值的图层,我可能会使用array
。
cube <- array(c(data.1,data.2,...),dim=c(dim(data.1),N)) #for N layers
# and I apologize but I may have loaded this 3-D cube in the wrong order
maxvals<-array(dim=dim(data.1))
for (j in 1:dim(data.1)[1]) {
for (k in 1:dim(data.1)[2]) {
maxvals[j,k]<-which.max(cube[j,k,])
if(sum(cube[j,k,])==0 ) maxvals[j,k] <- 0
}
}
使用aggregate
或plyr
工具可以更有效地完成这项工作,但我希望这指明了方向。