r - 确定栅格堆栈中的哪个图层首先满足条件?
问题描述
我想分析光栅堆栈并确定堆栈中满足每个像素条件的第一层。
# 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 列,第一列满足我的条件。
一旦我为每个像素确定了正确的图层,我就想要一个具有正确图层编号的输出栅格作为每个像素的值。
我会很感激任何帮助!
这里发布了一些类似的问题,尽管这是在计算满足条件的层数。
解决方案
您可以编写一个函数来为向量执行此操作,然后在raster::calc
.
例如,要查找值为 3 的第一层
f <- function(x) which(x == 3)[1]
(并通过返回来处理所有值都不是 3 的情况NA
)
例如
library(raster)
s <- stack(system.file("external/rlogo.grd", package="raster"))
f <- function(x) which(x == 255)[1]
x <- calc(s, f)
plot(x)
推荐阅读
- typescript - 打字稿:未正确推断泛型类型(`未知`)
- javascript - 如何在 for 循环中创建动态状态?
- python - Python Dataframe 将 csv 行名称和值导入列
- reactjs - React:useEffect 总是正确的方法吗?
- git - 我可以使用它的索引而不是它的路径来引用“git diff path/to/file”中的脚本吗?
- r - 使用可能匹配的向量标准化组名
- python - 数据框列值总和显示错误
- java - 如何使用java流将csv转换为HashMap而不在中间操作中创建条目?
- ffmpeg - 处理输入时发现无效数据 | ffmpeg
- javascript - 如何解决重复资源