我正在尝试使用terra::extract()来获取地块中的平均NDVI值。我注意到来自terra::extract()的数据帧给出了NA值(实际上,在4519个观察值中,我有2494个NA值)。我的NDVI光栅的空间分辨率约为0.5英尺(0.15米)。下面是我的代码。我也尝试过exactextractr::exact_extract(),但它没有给我提供与raster::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发布于 2021-03-02 13:43:21
在问R问题时,请提供一个自包含的最小可重复性示例。
您可以添加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来获得相同的结果。
发布于 2021-08-04 07:10:52
@MireilleVargas这可能与栅格terra::extract()中使用的列有关。同样的事情也发生在我身上,所以我通过在ArcMap中交叉引用进行了进一步的研究,发现它拉出的是“”列--它计算每个特定值有多少像素--而不是“”列。我注意到,无论是通过rast导入栅格,还是将RasterLayer转换为SpatRast对象,都会发生这种情况。似乎栅格软件包可能会自动检测值列,但在terra中,要切换从栅格中提取的活动类别,请使用activeCat()函数。例如,activeCat(ndviRast) <- 2
https://stackoverflow.com/questions/66417584
复制相似问题