Пожалуйста, всегда предоставляйте некоторые примеры данных:
library(raster)
f <- system.file("external/rlogo.grd", package="raster")
s <- stack(f, f)
names(s) <- 1900:1905
p <- matrix(c(48, 48, 48, 53, 50, 46, 54, 70, 84,
7, 14, 26, 29, 39, 45, 51, 56, 46), ncol=2)
p <- data.frame(p, c(1900:1905, 1904:1902))
colnames(p) <- c("lon", "lat", "year")
p
# lon lat year
#1 48 7 1900
#2 48 14 1901
#3 48 26 1902
#4 53 29 1903
#5 50 39 1904
#6 46 45 1905
#7 54 51 1904
#8 70 56 1903
#9 84 46 1902
Подход 1. Извлеките все значения и подмножество позже:
e <- extract(s, p[,c("lon", "lat")])
cnms <- as.numeric(gsub("X", "", colnames(e)))
j <- match(p$year, cnms)
pairs <- cbind(1:nrow(e), j)
v <- e[ pairs ]
v
#[1] 194 161 203 221 173 174 202 179 152
Подход 2. Цикл по годам
vv <- rep(NA, nrow(p))
snms <- as.numeric(gsub("X", "", names(s)))
for (y in unique(p$year)) {
i <- p$year == y
py <- p[i, ]
j <- which(snms == y )
vv[i] <- extract(s[[j]], py[,c("lon", "lat")])
}
vv
#[1] 194 161 203 221 173 174 202 179 152