【发布时间】:2016-08-05 05:59:58
【问题描述】:
我有一个数据框 (df),其中包括纬度和经度坐标 (Lat, Long) 以及每个条目的温度测量的深度 (Depth)。本质上,每个条目都有 (x,y,z)=(Lat,Long,Depth) 位置信息用于每个温度测量。
我正在尝试通过查找和删除重复的测量位置来清理数据。最简单的部分是删除 exact 重复项,处理方式如下:
df = df[!(duplicated(df$Lat) & duplicated(df$Long) & duplicated(df$Depth)),]
但问题是某些条目的 lat/long 值只是 略微 关闭,这意味着上面的代码不会捕获它们,但它们仍然明显重复(例如 lat = 39.252880 &纬度 = 39.252887)。
有没有办法找到在第一个实例的某个绝对值或百分比范围内的重复项?
感谢您的帮助,谢谢!
【问题讨论】:
-
您可以将所有值四舍五入到您喜欢的任何容差,然后查找重复项。在您的示例中,四舍五入到小数点后三位将给出两个点的纬度 = 39.253。或者,计算每个测量值之间的空间距离并找到在彼此的某个临界距离内聚集的点组可能更有意义。然后,在这些集群中,找到具有相同深度的行并对它们进行平均。请参阅this SO answer,了解如何查找空间距离和识别点簇。
-
第一种方法,你可以缩短你的代码:
df.new = df[!duplicated(round(df[,c("lat","long","depth")], 3)), ].
标签: r duplicates