2016-06-13 7 views
2

Я использую функцию duplicated на объекте data.table. Он возвращает FALSE по двум значениям, которые кажутся одинаковыми.Дублированный с крошечной разностью разностей

Глядя в них, кажется, что они имеют небольшую разницу (от -1.867777e-14, но это может быть любое другое значение, близкое к нулю).

Для моих нужд это ошибка. Как бы вы исправить это, не изменяя значения в таблице?

+2

Вы можете 'round()' ваши значения. – 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', я бы использовал что-то например, 'duplicated (dt [, non_numeric_cols, with = FALSE], = NULL) & duplicated (round (dt [, numeric_cols, with = FALSE], = NULL), 5)'? –

Смежные вопросы