2016-06-07 39 views
0

我有一個字符格式的數據編號data.table,我試圖轉換爲數字編號。然而,問題是,數字是很長,我想從R.保留所有的數字沒有任何四捨五入爲examle的data.table的第5個元素:從字符轉換爲數字時的舍入錯誤

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

我寫了一個功能轉換從一個字符到數字:

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)) 
} 

但是,舍入發生在R中,所以數據點現在有相同的時間。見轉換後的前5個元素:

TimeOC <--convert_time_fast(as.numeric(TimeO)) 
> TimeOC[1] 
[1] 1.216311 
> TimeOC[2] 
[1] 1.216311 
> TimeOC[3] 
[1] 1.216311 
> TimeOC[4] 
[1] 1.216311 
> TimeOC[5] 
[1] 1.216311 

任何幫助搞清楚這一點將不勝感激!

回答

0

你應該測試看看它們是否真的相等(all.equal())。
通常R限制它打印的位數(通常爲7),但它們仍然存在。

參見下面的例子:

> 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

的問題是,我想圖表中的數據點,並用相同的時間點被彼此 – CheddaShredda

+0

的頂部繪製當我做all.equal它說真,所以我認爲有一個問題在實際轉換功能 – CheddaShredda

+0

我也有這個問題。將字符(帶有許多小數位)轉換爲數字。丟失小數位和後續問題。對於任何有答案的人來說,都是積極向上的。 :-) – roman

相關問題