我有一个大的栅格数据集(实际上有几个)。我正在寻找R的移动窗口过程(例如光栅包中的焦点')。然而,应用于窗口的功能需要相对于所述窗口的中心单元进行计算。
举一个简单的例子,我想要一个移动窗口函数,它告诉我窗口中有多少个单元格在某个值范围内' d'窗口的中心单元格。我怀疑通过简单地查询中心单元格的值并在其周围编写一个函数以便在focal()中使用,我可以轻松地做到这一点。但是,我不确定如何查询窗口的中心单元格。
如果可能,那么我最终需要在一个栅格上运行此功能,该栅格基于另一个完全重叠的栅格中的中心单元格的值(可能在堆栈中等等)。
我对光栅工作感到满意,但不熟悉R中{raster}包中的focal()命令。希望有人可以提供一些信息。
答案 0 :(得分:3)
library(raster)
# taking a 4x5 matrix as a simple example.
x <- matrix(1:20, 4)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
# convert it to a rasterLayer
r <- raster(x)
d <- 15 # a value to use as reference with the function
# a criterion function to apply with focal (moving window)
f.rast <- function(x) length(x[x>d])
# apply the function to a 3x3 moving window
aggr <- as.matrix(focal(r, matrix(1,3,3), f.rast, pad = T, padValue = 0))
> aggr
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 2 2
[2,] 0 0 0 3 3
[3,] 0 0 1 4 4
[4,] 0 0 1 3 3
现在我认为这是理解你的过滤器“d”的问题。