R语言修正网格角点空间数据 调整整数经纬度避免重复统计
R实现整数经纬度无偏偏移方案
你可以用dplyr的向量化操作完成需求,全部逻辑都在管道流内实现,对百万级数据集也有很高的运行效率:
- 首先加载依赖包:
library(dplyr)
- 方案1:对所有单独为整数的经度/纬度分别做偏移(只要单个坐标是整数就调整)
set.seed(123) # 可选参数,设置后可固定随机结果方便复现 fish_processed <- fish %>% mutate( # 处理整数纬度 lat = if_else( near(lat, as.integer(lat)), lat + sample(c(-0.01, 0.01), n(), replace = TRUE), lat ), # 处理整数经度 long = if_else( near(long, as.integer(long)), long + sample(c(-0.01, 0.01), n(), replace = TRUE), long ) )
- 方案2:仅对经纬度同时为整数的网格角点做偏移
如果你的需求是只有同时落在经纬网格交点的点才需要调整,可以用下面的变体:
fish_processed <- fish %>% mutate( # 辅助判断是否为网格角点 is_corner = near(lat, as.integer(lat)) & near(long, as.integer(long)), lat = if_else(is_corner, lat + sample(c(-0.01, 0.01), n(), replace = TRUE), lat), long = if_else(is_corner, long + sample(c(-0.01, 0.01), n(), replace = TRUE), long) ) %>% select(-is_corner) # 删除辅助列
逻辑说明
- 用
near()替代直接相等判断,避免浮点数精度误差导致的识别遗漏 sample()函数每次生成正负值的概率均为50%,不会引入方向偏差- 全量向量化操作无需循环,百万级数据可在秒级完成处理
内容的提问来源于stack exchange,提问作者2ton21
相关产品推荐
相关产品推荐

