terra extract()给出r中的NA值



我试图通过使用terra::extract()来抓取包裹中的平均NDVI值。我注意到terra::extract()中的数据框为我提供了NA值(事实上,我在4519个观测值中有2494个NA值)。我的NDVI栅格的空间分辨率约为0.5英尺(0.15米)。下面是我的代码。我还尝试了exactextractr::exact_extract(),但它没有给我与光栅::extract()相同的值。从我所读到的,exactextractr::exact_extract()占位于多边形内的单元的一部分。我想知道什么更好的使用,exactextractr::exact_extract()或terra::extract()。任何帮助/指导将是伟大的!

epa_fatparcels_sidewalk_adjacent <- 
epa_parcels_sidewalk_adjacent %>%
st_transform(projection) %>% 
st_buffer(330) %>% 
st_transform(st_crs(epa_ndvi))
tictoc::tic()
epa_ndvi_sr<- terra::rast(epa_ndvi)
epa_fatparcels_sidewalk_adjacent_sv <- epa_yards_sidewalk_adjacent %>%
st_transform(st_crs(epa_ndvi)) %>%
#--- convert to a SpatVector object ---#
as(., "Spatial") %>% terra::vect()
epa_fatparcels_ndvi_v2 <- terra::extract(
epa_ndvi_sr, 
epa_fatparcels_sidewalk_adjacent_sv, 
fun="mean"
)
tictoc::toc() #took 17.92 sec elapsed

可以添加na.rm=TRUE来忽略NA的值

epa_fatparcels_ndvi_v2 <- terra::extract(
epa_ndvi_sr, 
epa_fatparcels_sidewalk_adjacent_sv, 
fun="mean", na.rm=TRUE
)

同样,这一行

as(., "Spatial") %>% terra::vect()

可以简化为

terra::vect()

对于exactrextactr—如果细胞相对较少,则最重要。对于terra::extract,您可以使用参数exact=TRUE来获得相同的结果。

@MireilleVargas这可能与terra::extract()使用的栅格内的列有关。同样的事情也发生在我身上,所以我通过在ArcMap中交叉引用进行了进一步的调查,发现它正在拉出"Count">列——计算每个特定值有多少像素——而不是"Value">列。我注意到,当通过rast导入栅格时,以及将栅格层转换为SpatRast对象时,都会发生这种情况。看起来栅格包可能会自动检测值列,但在terra中,要切换从栅格中提取的活动类别,请使用activeCat()函数。例如:activeCat(ndviRast) <- 2

最新更新