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

R语言sf对象按空间点分组计算气温多年均值方法

问题根因

未指定分组维度直接调用summarise()时,函数会对数据集全量记录做全局聚合,返回整表的统计结果,最终所有空间点都会得到完全相同的均值。
月尺度气温数据集属于典型长表结构时空数据:单个空间点对应480条(40年*12个月)时序记录,要得到每个点的独立均值,必须先按空间点的唯一标识拆分分组,再逐组做聚合计算。

实现步骤
  • 预处理:确认空间点唯一标识
    如果你的sf数据集没有能区分每个独立空间点的ID列,先手动生成唯一ID,已有site_id/point_id这类标识列可跳过该步:
library(sf)
library(dplyr)

# 为每个空间点生成唯一标识
temp_sf <- temp_sf %>%
  mutate(point_uid = seq_len(n()))
  • 分组聚合计算均值
    核心是先按点的唯一ID分组,再执行统计计算,聚合后会自动保留每个点对应的空间几何,不需要额外做几何关联:
temp_avg_sf <- temp_sf %>%
  group_by(point_uid) %>% # 按单个空间点分组,是得到逐点结果的核心
  summarise(
    AvgTMean = mean(tmean, na.rm = TRUE),
    AvgTMin = mean(TMin, na.rm = TRUE),
    AvgTMax = mean(TMax, na.rm = TRUE),
    .groups = "drop"
  )
注意事项
  • 必须加na.rm = TRUE参数:长时序月值数据普遍存在缺测,不加该参数时,只要某点的时序里存在1个缺失值,该点的均值就会返回NA
  • 结果校验:聚合完成后,输出sf对象的行数应该和原始数据里的独立空间点总数完全一致,几何类型仍为POINT,不存在几何合并的情况
  • 结果可直接用于交互式绘图:输出的temp_avg_sf是标准sf格式,可直接传入leaflet、mapview等包绘制气温空间分布地图,不需要额外做格式转换。
错误写法复现

以下就是导致全点均值一致的错误写法,未分组直接聚合会返回全局均值+合并后的单个几何:

wrong_result <- temp_sf %>%
  summarise(
    AvgTMean = mean(tmean, na.rm = TRUE),
    AvgTMin = mean(TMin, na.rm = TRUE),
    AvgTMax = mean(TMax, na.rm = TRUE)
  )

该写法输出的结果只有1行记录,后续关联到所有空间点时,自然会出现全数据集均值完全一致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:18:24