【问题标题】:Duplicated with a tiny magnitude difference以微小的幅度差异复制
【发布时间】:2016-10-13 13:53:31
【问题描述】:

我在 data.table 对象上使用duplicated 函数。它在两个看似相同的值上返回 FALSE

更深入地研究它们,它们似乎有一个微小的差异(-1.867777e-14,但它可以是任何其他接近零的值)。

根据我的需要,这是一个错误。在不更改表中的值的情况下如何解决它?

【问题讨论】:

  • 你可以round()你的价值观。
  • 是的,这就是我正在考虑的,只是想知道究竟如何(并非我的所有列都是数字的,我不确定我想要多精确)。但它应该会奏效。
  • 你的意思是有些列是字符?也许你想基于字符串的模糊匹配来重复,见:stackoverflow.com/questions/11535625
  • 字符列应该完全匹配。
  • 如果您正在寻找要分组的数字之间的精确tolerance 距离,您可以使用自滚动连接给出roll=tolerance / roll=-tolerancerollends=TRUE。请注意,在任何编程语言中,高浮点精度都是特定于平台的。

标签: r data.table precision


【解决方案1】:

您可以在使用duplicated 的同时尝试round

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

【讨论】:

  • 谢谢。如果我需要检查一些非数字(因此不能四舍五入)的重复值以及我的数字,我该怎么做?
  • 看这个问题的例子:stackoverflow.com/questions/13742446/…
  • 因此,根据示例,如果我有 numeric_colsnon_numeric_cols 列名,我会使用类似 duplicated(dt[, non_numeric_cols, with=FALSE], by=NULL) &amp; duplicated(round(dt[, numeric_cols, with=FALSE], by=NULL), 5) 的名称?
猜你喜欢
  • 2018-02-17
  • 2011-02-04
  • 1970-01-01
  • 2018-01-06
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
相关资源
最近更新 更多