2016-12-20 3 views
0

私はJavaコードから生成されたCSVファイルを持っており、今度はRで作業したいと思っています。問題は、自分の属性の1つに問題があることです。データをRにインポートするときの精度の低下を回避するには?

Timestamp属性がJavaでlongとして保存されました。 Rへのデータのインポートこの

1481653606064 
1481653606064 
1481653606064 
1481653606065 
1481653606068 
1481653606073 
1481653606081 
1481653606083 

これに変換される:

1,48165E+12 
1,48165E+12 
1,48165E+12 
1,48165E+12 
1,48165E+12 
1,48165E+12 
1,48165E+12 
1,48165E+12 

全く有用ではないです。

私はちょうどRとの作業を開始したので、これはおそらく単純な問題を回避する方法はわかりません。そして、あなたが私を助けてくれることを願っています。

説明が必要な場合は、コメントを残してください。

+1

変数 'Timestamp'のクラスを確認するために' str(DF $ Timestamp) 'を実行できますか?' DF'は入力したdata.frameです。最も可能性の高いシナリオは、その視覚効果とタイムスタンプが科学記法で書式設定されていることです。これを抑止するには、 'options(scipen = 999)'を試して、csvをもう一度読むことができます。 – OdeToMyFiddle

+2

データの表示は、記憶域の精度と同じではありません - 'x < - 1481653606064; print(x); dput(x) ' – thelatemail

答えて

2
X = read.csv(text="1481653606064 
1481653606064 
1481653606064 
1481653606065 
1481653606068 
1481653606073 
1481653606081 
1481653606083", header=FALSE) 

X 
      V1 
1 1.481654e+12 
2 1.481654e+12 
3 1.481654e+12 
4 1.481654e+12 
5 1.481654e+12 
6 1.481654e+12 
7 1.481654e+12 
8 1.481654e+12 


options(digits=13) 
X 
      V1 
1 1481653606064 
2 1481653606064 
3 1481653606064 
4 1481653606065 
5 1481653606068 
6 1481653606073 
7 1481653606081 
8 1481653606083 
1

bit64パッケージとfread関数を使用して、data.tableパッケージのcsvからデータを読み込みます。

3

精度が低下することはなく、完全精度で印刷するだけで済みます。 2^53までの整数値は数値データ型に正確に格納され、2^53は15桁( "9,007,199,254,740,992")ですが、数字はわずか12桁です。

> x = 1481653606083 
> x 
[1] 1.481654e+12 
> sprintf("%.f",x) 
[1] "1481653606083" 
関連する問題