У меня есть список растровых стеков, представляющих собой временные ряды (более 300 слоев) для разных диапазонов. Временные ряды нерегулярны, и поэтому я хочу создать годовые композиты на основе медианы ndvi. Таким образом, из доступных изображений за один год выбирается пиксель с (близким к) медианным значением ndvi. Для других диапазонов я хочу создать ежегодные сводные данные на основе этого составного показателя ndvi. Я пытаюсь сделать маску, в которой каждый пиксель имеет значение индекса изображения, используемого для медианного композита ndvi. Я применю это к другим диапазонам, поэтому у меня будет «один и тот же» годовой составной показатель для каждого диапазона за год.
К сожалению, я застрял на создании маски. Я создал некоторые фиктивные данные, и каким-то образом они возвращают два индексных растра (один со значениями 1-3, другой 2-4), хотя я ожидал один (со значениями 1-4). Также моя функция не может обрабатывать значения NA, и добавление na.rm к функции calc не решает эту проблему. Мне интересно, что мне нужно настроить, чтобы получить один выходной слой со значениями от 1 до 4, и как позволить функции «какой» работать с NA.
#dummy data:
r <- raster(nrow=5, ncol=5)
set.seed(20181114)
s <- stack(lapply(1:5, function(i) setValues(r, runif(25, max=50))))
names(s) <- c("X2001", "X2002a", "X2002b", "X2002c", "X2002d")
#s$X2002a[2] <- NA
AnnualMask <- function(ts, year){
year <- as.character(year)
ts_year <- subset(ts, (grep(year, names(ts))))
indexraster <- calc(ts_year, function(x){
medianval <- median(x, na.rm = TRUE)
which(abs(x - medianval) == min(abs(x - medianval)))
})
return(indexraster)
}
mask2002 <- AnnualMask(s, 2002)
plot(mask2002)