使用圆形移动窗口对R中的分类数据计算多数

时间:2019-02-06 23:50:38

标签: r raster categorical-data

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

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)

但是,当我应用焦点权重来定义圆形移动窗口时,即使将栅格转换为因子,输出值仍被视为连续数字而不是离散值:

#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) 

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

1 个答案:

答案 0 :(得分:2)

如果 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)

enter image description here

#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)

enter image description here

对于整数输出,您也可以执行以下操作:

#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)

enter image description here