如何在R中匹配栅格堆栈图层提取多边形的平均栅格值
多边形匹配日期提取栅格均值问题解决
一、先修复raster::extract的语法错误
你报的unexpected '}'错误,就是代码里多了个多余的大括号。检查下循环结构,确保括号成对。正确写法示例:
# 假设SF对象是a,温度栅格砖是r_brick,a里的layerindex对应栅图层号 temp_mean <- numeric(nrow(a)) for (i in 1:nrow(a)) { temp_mean[i] <- raster::extract(r_brick, a$geometry[i], layer = a$layerindex[i], nl = 1, na.rm = TRUE, fun = mean) } # 把结果挂载到SF对象中 a$temp_mean <- temp_mean
注意:要保证layerindex是1到365之间的有效图层索引,循环的大括号别多写也别漏写。
二、用exactextractr高效处理(优先推荐)
exactextractr比raster::extract效率高很多,尤其是数据量大的场景,还能按多边形覆盖栅格的比例计算加权均值,结果更精准。
步骤1:安装并加载依赖包
install.packages("exactextractr") library(exactextractr) library(sf) library(raster)
步骤2:批量提取匹配图层的均值
分两种场景处理:
场景1:每个多边形对应任意指定图层(靠layerindex字段)
# 把栅格砖转成Stack格式(exactextractr兼容) r_stack <- stack(r_brick) # 逐个提取对应图层的均值 a$temp_mean <- sapply(1:nrow(a), function(i) { exact_extract(r_stack[[a$layerindex[i]]], a$geometry[i], fun = "mean", na.rm = TRUE) })
场景2:多边形与图层按顺序一一对应(第i个多边形对应第i层)
这种情况可以直接批量处理,效率拉满:
# 一次性提取所有多边形对应所有图层的均值 all_means <- exact_extract(r_stack, a, fun = "mean", na.rm = TRUE) # 取每个多边形对应自身索引图层的结果(取对角线值) a$temp_mean <- diag(do.call(cbind, all_means))
内容的提问来源于stack exchange,提问作者DMAD Tim
相关产品推荐
相关产品推荐

