在R中如何基于lat、lon、时间操作dataframe筛选符合年限的空间点位
解决方案
你可以通过tidyverse的分组聚合逻辑配合sf空间包实现需求,操作逻辑和你熟悉的netCDF筛选逻辑完全一致,全程保留矢量/表格格式,不会产生栅格化带来的精度误差。
首先加载所需依赖包:
library(tidyverse) library(sf)
如果你的数据当前是普通dataframe格式,先转为sf空间矢量对象:
your_sf_data <- st_sf(your_dataframe)
方法1:按ADM2_PCODE分组(性能最优,推荐优先使用)
ADM2_PCODE是行政区域唯一编码,用该字段分组运算效率最高:
result_sf <- your_sf_data %>% # 按行政编码分组,每个组对应一个独立空间单元 group_by(ADM2_PCODE) %>% # 统计每个空间单元的Valor非NA有效年数 mutate(valid_years = sum(!is.na(Valor))) %>% # 保留有效年数≥5的空间单元的所有记录 filter(valid_years >= 5) %>% # 清理中间计算字段 ungroup() %>% select(-valid_years)
方法2:按geometry字段分组(不依赖ADM2_PCODE)
如果ADM2_PCODE字段存在缺失,需要严格按几何边界匹配空间单元,直接对geometry列分组即可:
result_sf <- your_sf_data %>% group_by(geometry) %>% mutate(valid_years = sum(!is.na(Valor))) %>% filter(valid_years >= 5) %>% ungroup() %>% select(-valid_years)
可选操作
如果你仅需要导出符合条件的唯一空间矢量边界(不含逐年属性),可以在筛选后追加如下代码:
unique_valid_geoms <- result_sf %>% distinct(ADM2_PCODE, geometry)
内容的提问来源于stack exchange,提问作者Henrique
相关产品推荐
相关产品推荐

