2017-09-02 123 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自動假定第一列的類是整數64。從它的幫助文件:

integer64 = 「integer64」(缺省)讀取檢測爲含整數的 大於2^31較大如bit64類型:: integer64列。或者, 「double」|「numeric」讀作base :: read.csv;即可能與 失去精確度,如果是這樣靜靜地。或者,「角色」。

第一列的值爲:201500000001,201500000002等。如果您將它們視爲數字,則它們大於2^31(即2147483648)。因此fread將它們解釋爲integer64的值,&使它們看起來非常奇怪。

在這種情況下,data.table會自動爲您加載bit64包,以便數字正確顯示。但是,如果您沒有安裝bit64,您可能不會這樣安裝,因此應該警告您並要求您安裝它。缺少警告是開發版本v1.10.5中的錯誤修復5。從NEWS

當fread()和print()參見integer64列存在,但未安裝程序包bit64時,警告現在按預期顯示。感謝Santosh在r-help上的提問,並由Bill Dunlap轉發。

所以,只是install.packages("bit64"),你很好。您不需要重新加載數據。它隻影響如何打印這些列。

或者,如果將參數integer64 = "numeric"添加到fread函數中,結果將與您從read.csv得到的結果相匹配。但是如果它是一個ID列,從概念上講它應該是一個字符或因子,而不是整數。你可以使用參數colClasses=c("Num_Acc"="character")

+6

如果安裝了bit64軟件包,它們看起來並不奇怪。 – Roland