首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >terra extract()给出R中的NA值

terra extract()给出R中的NA值
EN

Stack Overflow用户
提问于 2021-03-01 14:30:26
回答 2查看 256关注 0票数 0

我正在尝试使用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()。任何帮助/指导都是很棒的!

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2021-03-02 13:43:21

在问R问题时,请提供一个自包含的最小可重复性示例。

您可以添加na.rm=TRUE以忽略NA

代码语言:javascript
复制
epa_fatparcels_ndvi_v2 <- terra::extract(
    epa_ndvi_sr, 
    epa_fatparcels_sidewalk_adjacent_sv, 
    fun="mean", na.rm=TRUE
)

另外,这一行

代码语言:javascript
复制
as(., "Spatial") %>% terra::vect()

可以简化为

代码语言:javascript
复制
terra::vect()

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

票数 1
EN

Stack Overflow用户

发布于 2021-08-04 07:10:52

@MireilleVargas这可能与栅格terra::extract()中使用的列有关。同样的事情也发生在我身上,所以我通过在ArcMap中交叉引用进行了进一步的研究,发现它拉出的是”列--它计算每个特定值有多少像素--而不是”列。我注意到,无论是通过rast导入栅格,还是将RasterLayer转换为SpatRast对象,都会发生这种情况。似乎栅格软件包可能会自动检测值列,但在terra中,要切换从栅格中提取的活动类别,请使用activeCat()函数。例如,activeCat(ndviRast) <- 2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66417584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档