2017-09-02 9 views
2

ここでの目的は、csvテーブルを読み取ることです。ファイルには直接URLがあります。 fread(data.tableパッケージ)を使用したいのはread.csvで高速ですが、少し問題があります。大きな数字を読むときfread(Rのdata.table)を使用する際のバグはありますか?

options(scipen=999) 

caracteristiques=read.csv(url("https://www.data.gouv.fr/s/resources/base-de-donnees-accidents-corporels-de-la-circulation/20160909-181230/caracteristiques_2015.csv")) 
caracteristiques[1,1] 
# 201500000001 

[1,1]要素を取得するには問題があります。

今私は、関数freadを使用します。

library(data.table) 

caracteristiques=data.table(fread("https://www.data.gouv.fr/s/resources/base-de-donnees-accidents-corporels-de-la-circulation/20160909-181230/caracteristiques_2015.csv", 
             sep=",")) 
    caracteristiques[1,1] 
    # 

その後、我々は奇妙な数を見ることができます。私はそれを表示するためにoptions(scipen=0)を指定する必要があります9.955423e-313 freadでいくつかのオプションを指定する必要があるのだろうかと疑問に思っています。なぜなら、最初の列に大きな数字があるからです。

答えて

6

fread自動的に最初の列のクラスをinteger64とします。そのヘルプファイルから:

integer64 = "integer64"(デフォルト)タイプbit64 :: integer64として2^31より大きい整数含む として検出された列を読み込みます。代わりに "double" | "numeric"はbase :: read.csvと同じように読み取ります。すなわち、可能であれば の精度が失われてしまいます。または、「文字」。

最初の列の値は、201500000001,201500000002などです。数値として扱うと、2^31より大きい値(2147483648)になります。したがって、freadinteger64の値と解釈し、&は本当に奇妙に見えました。

data.tableは、この状況で自動的にbit64パッケージをロードして、数字が正しく表示されるようにします。ただし、bit64がインストールされていない場合は、そうしないと警告が表示され、インストールを依頼されます。その警告の欠如は、開発バージョンv1.10.5のバグ修正5です。 NEWSから:意図したとおりのfread()および印刷()がinteger64列が存在するが、パッケージbit64がインストールされていない参照

、警告が表示されるようになりました。 rヘルプのSantoshとBill Dunlapによって転送された質問のおかげで。

だから、ちょうどinstall.packages("bit64")といいです。データをリロードする必要はありません。それらの列の印刷方法に影響を与えます。

また、fread関数に引数integer64 = "numeric"を追加すると、結果はread.csvのものと一致します。しかし、ID列の場合、概念的には整数ではなく文字または要素でなければなりません。あなたはそのために引数colClasses=c("Num_Acc"="character")を使うことができます。

+6

bit64パッケージがインストールされていると奇妙に見えません。 – Roland

関連する問題