我正在尝试计算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)
似乎零可能已添加到分析中,这就是问题所在。谁能引导我正确的方向?
答案 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)
#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)