3

我正在尝试计算 R 中栅格上的移动多数值。栅格包中的焦点函数仅提供平均值、最小值和最大值。我有一个具有 3 个值(1、2 和 3)的栅格,我希望在中心设置的 3x3 窗口中具有最丰富的值。

我怎样才能在 R 中最有效地做到这一点?谢谢!

library(raster)

# create data
r <- raster(nrows = 120, ncol = 120, xmn=0)
r[] <- sample(3, ncell(r), replace=TRUE)
4

2 回答 2

4

你可以这样做:

f <- function(x){
 tab <- table(x)
 # I am using the first value here, maybe you want to use the mean, 
 # if 2 or more values occur equally often.
 names(tab)[which.max(tab)][1]
}

r <- raster(nrows = 120, ncol = 120, xmn=0)
r[] <- sample(3, ncell(r), replace=TRUE)

r <- focal(r, w=3, f)
于 2012-06-19T14:34:46.243 回答
4

也许我有点晚了,但它可能对未来的读者有用:

现在在 R 中,您可以找到大多数(模式)的焦点函数,因此:

library(raster)

# create data
r <- raster(nrows = 120, ncol = 120, xmn=0)
r[] <- sample(3, ncell(r), replace=TRUE)

a<-focal(r, w=matrix(1,3,3), fun=modal)    # 3x3 moving window
plot(a)

(注意:使用 NA 值时要注意——最好将它们转换为整数)

结果:

焦点分析结果

于 2014-07-09T07:34:40.980 回答