R:查找特定值内的重复项

时间:2016-08-02 22:12:37

标签: r duplicates

我有一个数据框(df),包括纬度和经度坐标(纬度,长度)以及每个条目的温度测量值的深度(深度)。基本上,每个条目具有(x,y,z)=(纬度,长度,深度)每个温度测量的位置信息。

我试图通过查找和删除重复的测量位置来清理数据。简单的部分是删除完全重复项,按此处理:

df = df[!(duplicated(df$Lat) & duplicated(df$Long) & duplicated(df$Depth)),]

然而问题是某些条目的lat / long值只是稍微 off,这意味着上面的代码不会捕获它们但它们仍然是明显重复的(例如lat = 39.252880& lat = 39.252887)。

有没有办法找到第一个实例的某个绝对值或百分比内的重复项?

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

基于此post我能够提出解决方案。我修改了函数,以便对"重复"具有更严格的容差。为0.001,否则功能不变。但是,该应用程序略有改动:

output=data.frame(apply(dataDF,2,fun))

因为我想比较单个列中的值而不是单个行中的值。

要继续,我会将人工索引添加到输出数据框中供以后使用:

output$ind = 1:nrow(output)

主要部分是找到行索引,其中函数为三个位置信息字段(纬度,长度,深度)返回TRUE。以下代码查找所有三个都为真的索引,创建仅包含那些条目(仍然是逻辑)的临时数据框,查找重复项的索引,然后将其反转以返回将从完整的原始数据集中删除的索引(原谅糟糕的变量名称):

ind = which(with(output,(Lat=='TRUE' & Long=='TRUE' & Depth=='TRUE')))
temp = dataDF[ind,]
temp$ind = ind
ind2 = duplicated(temp[,1:3])
rem = ind[ind2]

df.final = dataDF[-rem,]

希望这有帮助!它有点复杂,大型数据集的功能非常慢,但它完成了工作。