2016-06-13 31 views
2

我在data.table对象上使用duplicated函数。它返回FALSE两个似乎相同的值。复制一个微小的差异

更深入地看,它们看起来有微小的差别(-1.867777e-14,但它可以是任何其他接近零的值)。

我的需要,这是一个错误。你如何解决它,而不改变表中的值?

+2

你可以把你的价值四舍五入。 – mtoto

+0

是的,这就是我在想什么,只是想知道如何(不是所有的列都是数字,我不知道我想要如何精确)。但它应该解决。 –

+0

你的意思是有些列是字符?也许你想基于字符串的模糊匹配进行重复,请参阅:http://stackoverflow.com/questions/11535625 – zx8754

回答

4

您可以尝试round,同时使用duplicated;

> x<-c(10.258963,10.258962) 
> duplicated(x) 
[1] FALSE FALSE 
> duplicated(round(x,5)) 
[1] FALSE TRUE 
+0

谢谢。如果我需要检查某些非数字值(因此不能舍入)以及数值的重复值,我该怎么办? –

+0

查看此问题的示例:http://stackoverflow.com/questions/13742446/duplicates-in-multiple-columns –

+1

因此,根据示例,如果我有'numeric_cols'和'non_numeric_cols'列名,我会使用一些像'duplicateated(dt [,non_numeric_cols,with = FALSE],by = NULL)&duplicate(round(dt [,numeric_cols,with = FALSE],by = NULL),5)'? –