从数据框中删除类似的重复项

sim*_*ack 2 r dataframe

如何删除值在特定阈值内的数据帧中的行?

                x             y
1   -0.111111e-15  0.111111e-15
2   -1.111112e-15  1.111112e-15
3   -1.111111e-15  1.111111e-15
Run Code Online (Sandbox Code Playgroud)

例如,如果我将阈值设置为1e^-8,则将删除第二行或第三行.

42-*_*42- 5

我用一点实用函数rd.txt输入控制台输出:

> dat <- rd.txt("                x             y
+ 1   -0.111111e-15  0.111111e-15
+ 2   -1.111112e-15  1.111112e-15
+ 3   -1.111111e-15  1.111111e-15"
+ )
> dat[ ! duplicated( round(dat,-8) ),]
             x           y
1 -1.11111e-16 1.11111e-16
Run Code Online (Sandbox Code Playgroud)

(我的第一个版本带有减号而不是否定运算符是不正确的.)如果所有列都不是数字,则需要进行一些修改.如果是这种情况,那么请发布一个适当的测试示例,最好使用dput() - 输出而不是控制台输出,这通常是模糊的.

使用来自其他响应者的示例(已修改为传递请求的对象类):

dfrm<-data.frame(id=letters[1:3],x=c(-1/9/1e15,-1/9/1e14,-1/9/1e14),
               y=c(1/9/1e15,1/9/1e14,1/9/1e14))
dfrm[ ! duplicated( round( dfrm[ , sapply(dfrm, is.numeric)],8)), ]
  id             x            y
1  a -1.111111e-16 1.111111e-16
Run Code Online (Sandbox Code Playgroud)