2012-06-19 4 views
1

Я пытаюсь вычислить движущиеся значения большинства над растром в R. Фокусная функция в растровом пакете просто обеспечивает среднее значение, мин и макс. У меня есть растр с 3 значениями (1, 2 и 3), и я хотел бы иметь значение, наиболее распространенное в окне 3x3, установленном в центре.Вычисление движущегося большинства в R

Как я могу сделать это наиболее эффективным в R? Спасибо!

library(raster) 

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

ответ

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) 
+0

Хороший подход. Я использовал «таблицу» в функции доморощенного, чтобы вычислить значение (ы) режима ансамбля. Естественно, я не могу найти этот код прямо сейчас :-( –

+0

Спасибо за помощь! Это сработало отлично. – CWohlfart

2

Может быть, я немного поздно, но это может быть полезно для futurs читателей:

Теперь в 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) 

(ПРИМЕЧАНИЕ: убедитесь внимание whenusing значения NA - это стоит лучше сотрудничать nvert их на целое число)

результат:

result from focal analysis

Смежные вопросы