阅读大量数据时,使用fread(R中的data.table)有问题吗?

阅读大量数据时,使用fread(R中的data.table)有问题吗?

问题描述:

这里的目的是读取一个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中指定一些选项,因为它们在第一列中是大数字。

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