使用循环移动 window 对 R 中的分类数据计算多数

Calculate majority using circular moving window on categorical data in R

我正在尝试计算 R 中分类栅格数据集中的多数值,例如使用土地覆盖数据。这类似于 ArcGIS 中使用多数统计的焦点统计工具。我能够使用矩形移动 window 和模态函数来计算大多数土地覆盖类型:

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)

然而,当我应用焦点权重来定义我的圆形移动时 window,输出值似乎被视为连续数字而不是离散值,即使我将光栅转换为一个因子:

#convert to a factor factor
r.f<-as.factor(r)
#set up window
fw <- focalWeight(r.f, 4.5, type='circle')
#apply focal fxn
r.f.focal<-focal(r.f, w=fw, fun=modal, na.rm=TRUE) 

似乎零可能被添加到分析中,这就是问题所在。谁能指引我正确的方向?

如果d(现在是4.5)是一个整数,我想它会被修复。您定义的半径应基于单元格计数 (1,2,3,...,n)。然而,输出仍将是浮点格式,因为内核中的每个 xij 都是一个总和为 1 的浮点数。要实现整数输出,还有第三种选择。

library(raster)

set.seed(070319)
# 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

par(mfrow=c(1,2)) 
plot(r)
plot(a)

#set up window
fw <- focalWeight(r, 4, type='circle')
#apply focal fxn
r.f.focal<-focal(r, w=fw, fun=modal, na.rm=TRUE)

par(mfrow=c(1,2)) 
plot(r)
plot(r.f.focal)

对于整数输出你也可以这样做:

#set up window
fw <- ceiling(focalWeight(r, 4, type='circle'))#for integer output
#apply focal fxn
r.f.focal<-focal(r, w=fw, fun=modal, na.rm=TRUE)

par(mfrow=c(1,2), oma=c(0,0,0,1)) 
plot(r)
plot(r.f.focal)