我刚开始使用R程序。我有一个由10个栅格组成的堆栈,其中每个栅格表示在景观上给定点(像素)发生的生态系统类型(例如针叶林、草地、湿地)的概率(在0到1之间)。所有栅格层的行数和列数都相同。
我一直在使用raster包中的"which.max“命令来找出哪个栅格层(生态系统类型)在景观上的某个点出现的概率最高。我将生成的栅格保存为ascii栅格文件,并在ArcMap或SAGA中查看它,以了解这10种生态系统类型在整个研究区域中的分布情况。生成的栅格通过识别栅格堆栈中的哪一层具有最高概率来标识每个像素的生态系统类型,因此如果值为"1",则堆栈中的第一个栅格在景观上的该点上出现的概率最高。
然而,据我所知,如果两个或更多的栅格具有相同的值,则"which.max“命令仅标识一个栅格层(最后一个栅格与绑定的值?)。这意味着产生的栅格可能会受到我在栅格堆栈中分配10个生态系统类型的顺序的强烈影响。
我想要做的是有一个结果光栅记录,如果多个栅格层具有相同的最大概率,哪些层是相连的。例如,我在想,如果栅格堆栈中的图层4和8具有相同的最大值,那么生成的栅格层可以通过记录值"48“来识别它。或者,如果三个栅格图层都具有相同的最大值,则结果值可能为"259“
有没有人对如何做到这一点有什么建议?
谢谢。
发布于 2016-03-21 06:09:42
试试这个:
> # create a small sample set
> raster <- matrix(sample(3, 25, TRUE), 5)
> raster
[,1] [,2] [,3] [,4] [,5]
[1,] 3 1 2 3 2
[2,] 2 1 2 1 3
[3,] 2 1 1 2 1
[4,] 1 3 2 3 2
[5,] 1 3 3 1 3
> # create a new value representing the column number (assuming 1-9)
> cols <- apply(raster, 1, function(.row){
+ mCols <- which(.row == max(.row))
+ sum(mCols * 10 ^ (rev(seq_along(mCols)) - 1))
+ })
> cbind(raster, cols)
cols
[1,] 3 1 2 3 2 14
[2,] 2 1 2 1 3 5
[3,] 2 1 1 2 1 14
[4,] 1 3 2 3 2 24
[5,] 1 3 3 1 3 235发布于 2016-03-21 17:30:25
下面是一个基于Data Munger的RasterBrick的示例
whiches <- function(i, stat=max) {
m <- which(i == stat(i, na.rm=TRUE))
sum(m * 10^(rev(seq_along(m)) - 1))
}
library(raster)
b <- brick(system.file("external/rlogo.grd", package="raster"))
x <- calc(b, whiches)
freq(x)
plot(x)注意,只有当你的图层少于10层时,你才能使用它!
https://stackoverflow.com/questions/36117678
复制相似问题