确定栅格堆栈中的哪一层首先满足条件?

时间:2019-07-11 17:54:23

标签: r function raster r-raster

我要分析栅格堆栈并确定堆栈中满足每个像素条件的第一层。

# Generate stack of random values
library(raster)

r1 <- r2 <- r3 <- r4 <-r5 <- r6 <- r7 <- raster(ncol=10, nrow=10)
r1[] <- rpois(ncell(r1), 1)
r2[] <- rpois(ncell(r2), 1)
r3[] <- rpois(ncell(r3), 1)
r4[] <- rpois(ncell(r4), 1)
r5[] <- rpois(ncell(r5), 1)
r6[] <- rpois(ncell(r6), 1)
r7[] <- rpois(ncell(r7), 1)

# stack them
s <- stack(r1,r2,r3,r4,r5,r6,r7)

例如,我要获取此堆栈并确定满足以下条件的第一层:“对于连续3层,值= 1”或“最后3层中的2层具有值= 1”。

您能想到执行此操作的任何功能吗?

如果运行rasterToPoints,则可以将堆栈转换为具有表示每个图层值的列的数据框。这可以使事情变得容易。

values<-as.data.frame(rasterToPoints(s))
values<-values[,3:ncol(values)]  #eliminates two columns at the beginning
values$first<-NA

在这一点上,我想我想遍历并填充value $ first列,并使第一列满足我的条件。

确定了每个像素的正确图层之后,我便希望输出具有正确图层编号的栅格作为每个像素的值。

我将不胜感激!

here发表了类似的问题,尽管这是在计算满足条件的层数。

1 个答案:

答案 0 :(得分:0)

您可以编写一个函数来对矢量执行此操作,然后在raster::calc中使用它。

例如,要查找值为3的第一层

f <- function(x) which(x == 3)[1] 

(并通过返回NA处理所有值都不为3的情况)

例如

library(raster)
s <- stack(system.file("external/rlogo.grd", package="raster"))
f <- function(x) which(x == 255)[1] 
x <- calc(s, f)
plot(x)