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

如何移除数据框中与各ID首个位置距离超8km的坐标记录

解决方案

方法一:使用sf包(推荐,现代空间数据处理工具)

sf是R中处理空间数据的主流工具,操作直观且代码简洁:

  1. 安装并加载所需包:
# 首次使用时安装包
install.packages(c("sf", "dplyr"))

# 加载包
library(sf)
library(dplyr)
  1. 将数据框转换为空间点对象,指定投影:
# 把Easting和Northing设为坐标列,绑定给定的UTM投影
sf_df <- st_as_sf(df, coords = c("Easting", "Northing"), crs = "+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
  1. 按ID分组计算距离并过滤数据:
filtered_sf <- sf_df %>%
  group_by(ID) %>%
  mutate(
    # 提取每个ID的第一个点作为参考点
    ref_point = first(geometry),
    # 计算每个点到参考点的距离(单位:米)
    distance_to_ref = st_distance(geometry, ref_point, by_element = TRUE)
  ) %>%
  # 保留距离≤8000米的记录
  filter(distance_to_ref <= 8000) %>%
  # 移除临时计算的辅助列(可选)
  select(-ref_point, -distance_to_ref) %>%
  ungroup()
  1. 如需转回普通非空间数据框:
filtered_df <- st_drop_geometry(filtered_sf)

方法二:使用sp+dplyr包(兼容旧版空间处理流程)

若习惯使用sp包,可采用以下方式:

  1. 安装并加载包:
install.packages(c("sp", "dplyr"))
library(sp)
library(dplyr)
  1. 创建SpatialPointsDataFrame:
# 提取坐标列
coords <- df[, c("Easting", "Northing")]
# 生成空间数据对象并绑定投影
sp_df <- SpatialPointsDataFrame(coords = coords, data = df, proj4string = CRS("+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"))
  1. 分组计算距离并过滤:
filtered_sp <- sp_df %>%
  as.data.frame() %>%
  group_by(ID) %>%
  mutate(
    # 获取每个ID的首个坐标
    ref_east = first(Easting),
    ref_north = first(Northing),
    # UTM投影下直接用欧氏距离计算米级距离
    distance = sqrt((Easting - ref_east)^2 + (Northing - ref_north)^2)
  ) %>%
  filter(distance <= 8000) %>%
  select(-ref_east, -ref_north, -distance) %>%
  ungroup()

# 转回空间数据对象(可选)
filtered_sp <- SpatialPointsDataFrame(coords = filtered_sp[, c("Easting", "Northing")], data = filtered_sp, proj4string = CRS("+proj=utm +zone=15 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"))

关键说明

  • 由于数据采用UTM投影(单位为米),直接计算欧氏距离即可得到精准的米级距离,无需进行球面距离转换。
  • 两种方法均可实现需求,sf包代码更简洁易维护,优先推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:35:10