我想从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
答案 0 :(得分:3)
您可以使用floor(x*10^y)
检查数字是否等于y
数字,因此在这种情况下y=2
和10^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))),]