You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用exact_extract时自定义权重与默认权重结果差异及解决方法咨询

使用exactextractr计算加权均值的疑问与解决

环境准备

library(exactextractr)
library(sf)
library(terra)

创建示例数据

# 示例多边形
p <- system.file("ex/lux.shp", package="terra")
p <- vect(p)
p <- p[1, ]
p_sf <- st_as_sf(p)

# 示例栅格
r <- system.file("ex/elev.tif", package="terra")
r <- rast(r)
r <- crop(r, p , snap = "out", mask = T)

计算默认面积加权均值

exact_extract(r, p_sf, 'mean')
# 467.3792

根据文档说明,上述计算为面积加权均值,即使用栅格单元格与多边形的相交面积作为权重进行平均。

使用自定义栅格权重计算

# 创建栅格权重
r_wt <- r / global(r, "sum", na.rm = T)$sum

exact_extract(r, p_sf, weights = r_wt, 'weighted_mean')
# 469.8506

疑问

为什么两种方式得到的结果不同?我怀疑即使传入外部权重,该权重仍会与单元格面积权重相乘后用于加权均值计算。请问是否可以关闭面积权重的相乘,仅使用自定义外部权重来计算加权均值?

解答

是的,你的怀疑是正确的:exact_extract的内置weighted_mean统计量会自动将传入的外部权重与单元格的相交面积权重相乘,这就是两次结果存在差异的原因。

如果要仅使用自定义外部权重计算加权均值,需要通过自定义函数实现,而非依赖内置的weighted_mean。具体代码如下:

exact_extract(r, p_sf, function(values, weights) {
  sum(values * weights, na.rm = TRUE) / sum(weights, na.rm = TRUE)
}, weights = r_wt)

这段代码会直接基于你传入的自定义权重计算加权均值,不会再与面积权重相乘。

内容的提问来源于stack exchange,提问作者89_Simple

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 22:03:26