r - 计算相邻像素随时间的平均相关性

标签 r raster

我有一堆 4 个栅格。我想要一个像素与其 8 个邻居中的每一个之间随时间的平均相关性。

一些数据:

library(raster)  

r1=raster(matrix(runif(25),nrow=5))
r2=raster(matrix(runif(25),nrow=5))
r3=raster(matrix(runif(25),nrow=5))
r4=raster(matrix(runif(25),nrow=5))
s=stack(r1,r2,r3,r4)

所以对于位置 x 的像素,它在 NE、E、SE、S 等位置有 8 个邻居,我想要的平均值
cor(x,NE)
cor(x,E)
cor(x,SE)
cor(x,S)
cor(x,SW)
cor(x,W)
cor(x,NW)
cor(x,N)

以及保存在结果栅格中位置 x 的平均值。边缘单元格将是 NA 或者,如果可能的话,一个标志来计算与它接触的单元格(3 个或 5 个单元格)的平均相关性。
谢谢!

最佳答案

我不相信@Pascal 建议使用 focal()可以工作,因为 focal()将单个栅格图层作为参数,而不是堆栈。这是最容易理解的解决方案。通过最大限度地减少为每个焦点单元提取值的次数,可以提高效率:

library(raster)  

set.seed(2002)
r1 <- raster(matrix(runif(25),nrow=5))
r2 <- raster(matrix(runif(25),nrow=5))
r3 <- raster(matrix(runif(25),nrow=5))
r4 <- raster(matrix(runif(25),nrow=5))
s <- stack(r1,r2,r3,r4)

##  Calculate adjacent raster cells for each focal cell:
a <- adjacent(s, 1:ncell(s), directions=8, sorted=T)

##  Create column to store correlations:
out <- data.frame(a)
out$cors <- NA

##  Loop over all focal cells and their adjacencies,
##    extract the values across all layers and calculate
##    the correlation, storing it in the appropriate row of
##    our output data.frame:
for (i in 1:nrow(a)) {
    out$cors[i] <- cor(c(s[a[i,1]]), c(s[a[i,2]]))
}

##  Take the mean of the correlations by focal cell ID:
r_out_vals <- aggregate(out$cors, by=list(out$from), FUN=mean)

##  Create a new raster object to store our mean correlations in
##    the focal cell locations:
r_out <- s[[1]]
r_out[] <- r_out_vals$x

plot(r_out)

关于r - 计算相邻像素随时间的平均相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30929092/

相关文章:

r - 用短语构建语料库

R:GLMM glmer 与 glmmPQL

r - 在 R 中生成光栅图

r - 具有多个栅格堆栈的 ClusterR

r - 在 R 中使用栅格数据集的 PCA

r - 在漏斗图上绘制两组数据点(R 的元数据)

R Markdown 内联代码未执行

r - 如何对有向图进行排序和可视化?

r - 在第二层/属性上提取具有缓冲条件的栅格平均值

r - 来自光栅计算器的条件命令传输到 R