首页 > 解决方案 > 使用 raster::extract 从地图中提取值时,如何忽略/删除海洋中的点?

问题描述

我有一个记录的植物物种的坐标列表。

我正在从每个坐标的地图中提取年平均温度(使用raster::extract)。

但我现在意识到,由于一些采样误差(例如,它们就在海岸附近),一些坐标位于海洋中,导致从地图中提取的值不准确,因为地图只提供有关陆地站点的信息。

有没有一种快速的方法可以从坐标列表中删除海洋坐标,或者在从地图中提取温度值时忽略海洋坐标?(我必须对许多物种和环境变量这样做)

谢谢

标签: rextractraster

解决方案


提取值并检测s,您可以使用na.omit或类似的NA

示例数据:

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

推荐阅读