[英]Determine which layer in a raster stack is first to meet a condition?
我想分析栅格堆栈并确定堆栈中满足每个像素条件的第一层。
# 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)
我想获取此堆栈,并确定满足以下条件的第一层:例如,“ Value = 1 for 3连续的层”或“最后3层中的2层的值为value = 1”。
您能想到执行此操作的任何功能吗?
如果运行rasterToPoints,则可以将堆栈转换为具有表示每个图层值的列的数据框。 这可能使事情变得容易。
values<-as.data.frame(rasterToPoints(s))
values<-values[,3:ncol(values)] #eliminates two columns at the beginning
values$first<-NA
在这一点上,我想我想遍历并填写满足我的条件的values $ first列。
一旦确定了每个像素的正确图层,便需要具有正确图层编号的输出栅格作为每个像素的值。
我将不胜感激!
您可以编写一个可以对向量执行此操作的函数,然后在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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.