阅读大量数据时,使用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")
。
如果安装了bit64软件包,它们看起来并不奇怪。 – Roland