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

R 计算相邻像素随时间的平均相关性,r,raster,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等位置有

我有一堆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)
库(光栅)
种子集(2002)

r1您可能正在寻找
focal
函数。
focal()
仅将光栅层对象作为参数,而不是堆栈。它不会跨多个层提取。聪明!我不知道相邻的
。我试图使用
focal
for
循环来更改权重矩阵和
stackApply
来将必要的值提取到数据帧中……与此想法相同,但也不那么巧妙。还有簿记方面的头痛。谢谢还有
corLocal
方法,但这是一个稍有不同的情况。不客气,感谢Robert(除了编写包外)提到corLocal函数,它在更常见的相关用例中节省了大量时间。