2016-06-13 8 views
2

Ich verwende die duplicated Funktion für ein Objekt data.table. Es gibt FALSE für zwei Werte zurück, die identisch zu sein scheinen.Dupliziert mit einem winzigen Größenunterschied

Wenn man tiefer in sie schaut, scheint es, dass sie einen winzigen Unterschied haben (von -1.867777e-14, aber es kann irgendein anderer Wert nahe Null sein).

Für meine Bedürfnisse ist dies ein Fehler. Wie würden Sie es beheben, ohne die Werte in der Tabelle zu ändern?

+2

können Sie Ihre Werte runden(). – mtoto

+0

Ja, darüber denke ich nach und frage mich genau wie (nicht alle meine Spalten sind numerisch und ich bin mir nicht sicher, wie genau ich sein will). Aber es sollte klappen. –

+0

Meinst du einige Spalten sind Zeichen? Vielleicht möchten Sie auf dem Fuzzy-Matching von Strings basieren, siehe: http://stackoverflow.com/questions/11535625 – zx8754

Antwort

4

Sie können versuchen round während duplicated verwenden;

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

Danke. Wie würde ich das machen, wenn ich die Duplikate einiger Werte überprüfen müsste, die nicht numerisch sind (und daher nicht gerundet werden können), zusammen mit meinen Zahlen? –

+0

Siehe diese Frage für ein Beispiel: http://StackOverflow.com/questions/13742446/duplicates-in-multiple-columns –

+1

Also nach dem Beispiel, wenn ich 'numeric_cols' und' non_numeric_cols' Spaltennamen habe, würde ich etwas verwenden wie 'duplicated (dt [, non_numeric_cols, mit = FALSE], mit = NULL) & dupliziert (round (dt [, numeric_cols, mit = FALSE], mit = NULL), 5)'? –