Вы можете использовать na.omit
или аналогичный после того, как вы извлечете значения и обнаружите NA
s
Пример данных:
library(raster)
set.seed(1)
r <- raster(ncol=36, nrow=18, vals=1:(18*36))
r[sample(ncell(r), 300)] = NA
s <- stack(r, r)
names(s) <- c('temperature', 'rain')
xy <- cbind(lon=-50, lat=seq(-80, 80, by=20))
sp <- data.frame(sp=rep(c('A', 'B', 'C'), 3), xy)
Использовать экстракт
e <- extract(s, xy)
x <- data.frame(sp, e)
x
# sp lon lat temperature rain
#1 A -50 -80 NA NA
#2 B -50 -60 NA NA
#3 C -50 -40 482 482
#4 A -50 -20 NA NA
#5 B -50 0 338 338
#6 C -50 20 266 266
#7 A -50 40 NA NA
#8 B -50 60 122 122
#9 C -50 80 NA NA
y <- na.omit(x)
y
# sp lon lat temperature rain
#3 C -50 -40 482 482
#5 B -50 0 338 338
#6 C -50 20 266 266
#8 B -50 60 122 122