2016-06-07 15 views
0

Ich habe eine Datentabelle mit Datennummern im Zeichenformat, die ich in numerische Zahlen umwandeln möchte. Allerdings ist das Problem, dass die Zahlen sind sehr lang und ich möchte alle Zahlen ohne Rundung von R. Für examle die ersten 5 Elemente des data.table behalten:Rundungsfehler beim Konvertieren von Zeichen in Zahlen

> TimeO[1] 
[1] "20110630224701281482" 
> TimeO[2] 
[1] "20110630224701281523" 
> TimeO[3] 
[1] "20110630224701281533" 
> TimeO[4] 
[1] "20110630224701281548" 
> TimeO[5] 
[1] "20110630224701281762" 

Ich schrieb eine Funktion zu konvertieren von einem Zeichen in numerisch:

convert_time_fast <- function(tim){ 
    b <- tim - tim%/%10^12*10^12 
    # hhmmssffffff 
    ms <- b%%10^6; b <-(b-ms)/10^6 
    ss <- b%%10^2; b <-(b-ss)/10^2 
    mm <- b%%10^2; hh <-(b-mm)/10^2 
    # if hours>=22, subtract 24 (previous day) 
    hh <- hh - (hh>=22)*24 
    return(hh+mm/60+ss/3600+ms/(3600*10^6)) 
} 

Die Rundung tritt jedoch in R auf, so Datenpunkte haben jetzt die gleiche Zeit. Siehe die ersten 5 Elemente nach der Konvertierung:

Jede Hilfe, die dies herauszufinden würde sehr geschätzt werden!

Antwort

0

Sie sollten prüfen, ob sie wirklich gleich sind (all.equal()).
Normalerweise begrenzt R die Anzahl der auszudruckenden Ziffern (normalerweise auf 7), aber sie sind immer noch da.

Siehe auch folgendes Beispiel:

> as.numeric("1.21631114") 
[1] 1.216311 
> as.numeric("1.21631118") 
[1] 1.216311 
> all.equal(as.numeric("1.21631114"), as.numeric("1.21631118")) 
[1] "Mean relative difference: 3.288632e-08" # which indicates they're not the same 
+0

Das Problem ist, dass ich versuche, die Datenpunkte und die Punkte mit der gleichen Zeit grafisch darstellen werden auf aufeinander – CheddaShredda

+0

gezogen Wenn ich sie all.equal sagt WAHR, also denke ich, dass es ein Problem in der tatsächlichen Umwandlungsfunktion gibt – CheddaShredda

+0

Ich habe dieses Problem auch. Konvertieren von Zeichen (mit vielen Dezimalstellen) in numerisch. Verlust von Dezimalstellen und nachfolgenden Problemen. Massive Upvote für jeden mit einer Antwort. :-) – roman

Verwandte Themen