Рассчитать большинство, используя круговое скользящее окно для категориальных данных в R - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь вычислить значение большинства в категориальном растровом наборе данных в 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 голосов
/ 07 марта 2019

Я думаю, что это будет исправлено, если 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...