读取大数字时使用fread(R中的data.table)的错误?

读取大数字时使用fread(R中的data.table)的错误?,r,csv,data.table,fread,read.csv,R,Csv,Data.table,Fread,Read.csv,这里的目的是读取csv表,并且该文件有一个直接URL。 我想使用fread(data.table包),因为read.csv更快,但我有一个小问题 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_2

这里的目的是读取csv表,并且该文件有一个直接URL。 我想使用fread(data.table包),因为read.csv更快,但我有一个小问题

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]
    # 

然后我们可以看到一个奇怪的数字。我必须指定
选项(scipen=0)
来显示
9.955423e-313
我想知道是否必须在fread中指定一些选项,因为它们在第一列中是大数字。

fread
自动假定第一列的类是整数64。从其帮助文件:

integer64
=“integer64”(默认)读取检测到包含整数的列 大于2^31,类型为bit64::integer64。或者, “double”|“numeric”的读取方式与base::read.csv的读取方式相同;i、 例如,可能有 精确性的损失,如果是无声的。或“性格”

第一列中的值为:201500000001、201500000002等。如果将它们视为数字,则它们大于2^31(即2147483648)。因此,
fread
将它们解释为
integer64
值,使它们看起来非常奇怪

在此情况下,data.table将自动为您加载
位64
包,以便正确显示数字。但是,当您没有安装bit64时(您可能没有安装),它应该警告您并要求您安装它。缺少警告是开发版本v1.10.5中的错误修复5。发件人:

当存在fread()和print()see integer64列,但未安装软件包位64时,警告将按预期显示。感谢Santosh关于r-help的问题,由Bill Dunlap转发

所以,只要
install.packages(“bit64”)
就可以了。您不需要重新加载数据。它只会影响这些列的打印方式


或者,如果将参数
integer64=“numeric”
添加到
fread
函数中,结果将与从
read.csv
获得的结果相匹配。但如果它是一个ID列,概念上它应该是一个字符或因子,而不是整数。您可以使用参数
colClasses=c(“Num_Acc”=“character”)
来实现这一点。

如果安装了bit64软件包,它们看起来并不奇怪。