如何选择具有相似值的行?

时间:2018-02-02 16:06:30

标签: r filter rounding

我想从V2和V3中删除具有类似值的行: 如果数字和两个dicmels相似,则删除所有行但保留一行。 例如20.322515和20.32695将它们相似并删除一个

 dat=read.table("path/file.txt")
 head(dat)
             V1       V2       V3
          sla1   13.63502   12.98104
          l_2    13.63398   12.98128
          il_3   13.63294   12.98151
          14     23.63190   12.98174
          1_5    23.63086   12.98197
          21_6   23.63489   22.97930

期望的输出:

           V1       V2       V3
          il_3   13.63294   12.98151
          14     23.63190   12.98174
          21_6   23.63489   22.97930

2 个答案:

答案 0 :(得分:3)

您可以使用floor(x*10^y)检查数字是否等于y数字,因此在这种情况下y=210^2=100

df[!duplicated(floor(df[,c('V2','V3')]*100),fromLast = T),]

输出:

    V1       V2       V3
3 il_3 13.63294 12.98151
5  1_5 23.63086 12.98197
6 21_6 23.63489 22.97930

答案 1 :(得分:1)

我们可以使用sub删除两位小数后的子字符串

df[!duplicated(sapply(df[-1], function(x) sub("(.*\\..{2}).*", "\\1", x))),]