У нас есть растровое изображение, которое представляет собой порядковый номер, соответствующий началу вегетационного периода. То есть каждое значение пикселя в растре находится между 1: 365, представляющим порядковую дату.Извлечение ценности из уровня стека растра, определяемого значением пикселя разного растра
Я также рассчитал совокупные возрастающие дни для всех 365 дней в соответствующем году. Эти данные загружаются в R в виде растрового стека с 365 слоями.
Моя цель - случайный выбор географических местоположений в начале слоя вегетационного периода. Затем я надеюсь извлечь ценность кумулятивных возрастающих дней с тех же координат, но только из слоя стека дней возрастающей степени, который соответствует началу значения пикселя сезона.
Например, если начало сезона на заданном пикселе составляло 100-й день года, я хотел бы извлечь все возрастающие дни из этого места в 100-й день года (nlayers = 100).
Я пытаюсь написать функцию, чтобы выполнить это, но я не могу заставить его работать правильно. Я хотел бы получить рамку данных или матрицу, показывающую местоположение x, местоположение y, начало сезона и GDD на этот день. Вместо многих значений GDD в одном столбце я получаю много столбцов одного значения GDD.
Кажется, проблема в моем использовании выдержки. Я экспериментировал с аргументами nl, layer и индексированием аргумента x с помощью [[]]. Кажется, что они дают тот же результат. Вот упрощенный код, который нужно рассмотреть всего за 5 дней, и функцию, которую я пытаюсь построить.
Любая помощь/предложения оценены!
#============================================================
library(raster)
SOST <- raster()
SOST[] <- 1:5
r1 <- r2 <- r3 <- r4 <- r5 <- raster()
r1[] <- 10
r2[] <- 20
r3[] <- 30
r4[] <- 40
r5[] <- 50
GDD <- stack(r1,r2,r3,r4,r5)
getGDD <- function(sost, gdd, n){set.seed(232)
samp <- sampleRandom(sost, n, xy = TRUE,
na.rm = TRUE)
df <- data.frame('x'=as.numeric(), 'y'=
as.numeric(), 'SOST'=as.numeric(),
'GDD'=as.numeric())
df.temp <- data.frame('x' = samp[1:n,1], 'y' =
samp[1:n,2], 'SOST' = samp[,3],'GDD' =
extract(gdd, samp[1:n,1:2], nl = samp[1:n,3]))
df <- rbind(df, df.temp)
return(df)
}
getGDD(sost = SOST, gdd = GDD, n = 5)