R focal (raster package) function that calculates relative to center cell of moving window

女生的网名这么多〃 提交于 2019-12-25 03:57:18

问题


I have a large raster data set (several actually). I'm looking for a moving window process for R (like 'focal' in the raster package). However, the function to apply to the window needs to be caclulated relative to the center cell of said window.

For a simple example, I would like a moving window function that tells me how many of the cells in the window are within some value 'd' of the center cell of the window. I suspect I could do this easily by simply querying the value of the center cell and writing a function around it to use in focal(). However, I'm not sure how to query that center cell of the window.

If that's possible, then I will eventually need to run this function on one raster based on the value of the center cell in another perfectly overlaid raster (which could be in a stack or something).

I'm comfortable with raster work, but not that familiar with the focal() command from the {raster} package in R. Hoping someone can provide some info.


回答1:


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

now I think it as a matter of understanding your filter "d".



来源:https://stackoverflow.com/questions/24068509/r-focal-raster-package-function-that-calculates-relative-to-center-cell-of-mov

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!