【问题标题】:Determine which layer in a raster stack is first to meet a condition?确定栅格堆栈中的哪个图层首先满足条件?
【发布时间】:2019-07-11 17:54:23
【问题描述】:

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

# 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

此时我想我想循环并填写 values$first 列,第一列满足我的条件。

一旦我为每个像素确定了正确的图层,我就想要一个输出栅格,其中正确的图层编号作为每个像素的值。

如果有任何帮助,我将不胜感激!

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

【问题讨论】:

    标签: r function raster r-raster


    【解决方案1】:

    您可以编写一个函数来为向量执行此操作,然后在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)
    

    【讨论】:

    • 这很有用,谢谢!不过,您能想出任何方法来引用堆栈的多个层吗?例如,想在一行中找到等于 3 的三层?我现在已经通过运行 rasterToPoints 来创建一个数据框,然后在上面进行一个 while 循环来解决这个问题。
    • 您需要编写一个函数来为向量执行此操作;然后将其与calc 一起使用(如上所示)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2014-11-01
    相关资源
    最近更新 更多