如何基于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
相关产品推荐
相关产品推荐

