繁体   English   中英

terra extract() 在 R 中给出 NA 值

[英]terra extract() giving NA values in R

我试图通过使用 terra::extract() 来获取地块中的平均 NDVI 值。 我注意到来自 terra::extract() 的 dataframe 给了我 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

在询问 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来获得相同的结果。

@MireilleVargas 这可能与栅格terra::extract()正在使用的列有关。 同样的事情发生在我身上,所以我通过在 ArcMap 中的交叉引用进一步调查并发现它正在拉动“计数”列——它计算每个特定值有多少像素——而不是“值”列。 我注意到在通过rast导入所述栅格以及将 RasterLayer 转换为 SpatRast object 时都会发生这种情况。 似乎光栅 package 可能会自动检测值列,但在 terra 中,要切换从光栅中提取的活动类别,请使用activeCat() function。 例如, activeCat(ndviRast) <- 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM