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

XR *_* SC 2 csv r fread data.table 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_2015.csv"))
caracteristiques[1,1]
# 201500000001
Run Code Online (Sandbox Code Playgroud)

得到[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]
    # 
Run Code Online (Sandbox Code Playgroud)

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

Z.L*_*Lin 7

fread自动假设第一列的类为integer64.从其帮助文件:

integer64="integer64"(默认值)读取检测为包含大于2 ^ 31的整数的列,类型为bit64 :: integer64.或者,"double"|"numeric"读取为base :: read.csv; 也就是说,可能会失去精确度,如果是这样的话.或者,"人物".

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

bit64在这种情况下,data.table会自动为您加载包,以便正确显示数字.但是,当您没有bit64安装时,您可能不会,它应该警告您并要求您安装它.缺少警告是开发版v1.10.5中的错误修复5.来自新闻:

当fread()和print()看到整数64列存在但未安装包bit64时,警告现在按预期显示.感谢Santosh关于r-help的问题,并由Bill Dunlap转发.

所以,只是install.packages("bit64"),你很好.您无需重新加载数据.它只会影响这些列的打印方式.

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

  • 如果安装了bit64软件包,它们看起来并不奇怪. (6认同)