Как игнорировать / удалять точки в океане при извлечении значений из карты с помощью raster :: extract? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть список координат по зарегистрированным наблюдениям для вида растений.

Я извлекаю среднегодовую температуру из карты по каждой координате (используя raster::extract).

Но теперь я понимаю, что некоторые координаты находятся в океане из-за некоторой ошибки выборки (например, они находятся недалеко от берега), из-за чего извлеченные значения из карт будут неточными, поскольку карта дает информацию только о наземных участках.

Существует ли быстрый способ удаления координат океана из списка координат или игнорирование координат океана при извлечении значений температуры из карты? (Я должен сделать это для многих видов и переменных среды)

Спасибо

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете использовать 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
...