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

如何基于x、y双坐标匹配从DataFrame中移除相似坐标

解决方案:基于双坐标匹配移除重复行

要解决单坐标匹配导致的误删问题,你需要同时基于x和y两个坐标进行匹配,只移除两组数据中x、y完全一致的行。以下是两种可行的实现方式:

方法一:使用dplyr包的anti_join(推荐,代码更直观)

anti_join函数会直接保留第一个数据框中,在第二个数据框里找不到对应x、y组合的所有行,完美契合你的需求:

# 加载所需包
library(readxl)
library(dplyr)

# 读取两个Excel文件
b1 <- read_excel("DATA.xlsx")
d1 <- read_excel("data2.xlsx")

# 移除与data2.xlsx中x、y都匹配的行
b1_filtered <- anti_join(b1, d1, by = c("x", "y"))

方法二:Base R原生实现(无需额外安装包)

通过将x和y拼接成唯一标识字符串,再进行匹配判断:

library(readxl)

# 读取数据
b1 <- read_excel("DATA.xlsx")
d1 <- read_excel("data2.xlsx")

# 组合x、y为唯一字符串(确保只有x和y都相同时才会匹配)
b1_combined <- paste(b1$x, b1$y, sep = "_")
d1_combined <- paste(d1$x, d1$y, sep = "_")

# 过滤掉匹配的行
b1_filtered <- b1[!b1_combined %in% d1_combined, ]

补充说明

如果你的坐标是浮点型数值,存在微小精度差异(比如1.0000001和1.0被视为相似),可以结合dplyr::near函数进行模糊匹配,示例如下:

b1_filtered <- b1 %>%
  filter(!(row_number() %in% 
             which(semi_join(b1, d1, by = character()) %>%
                     mutate(match = near(x, d1$x) & near(y, d1$y)) %>%
                     pull(match))))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:26:11