fread阅读数据结构错误的引号

时间:2018-04-27 00:00:04

标签: r data.table

我要加载5 G文件数据。 fread似乎是加载它们的快速方法,但它读取我的所有数据结构都是错误的。它看起来像是导致问题的引号。

# Codes. I don't know how to put raw csv data here.   
dt<-fread("data.csv",header=T)
dt2<-read.csv("data.csv",header=T)
str(dt)
str(dt2)

这是输出。无论是num还是char,fread变量的所有数据结构都是char。

enter image description here enter image description here

2 个答案:

答案 0 :(得分:3)

很遗憾fread没有使用数字作为id列,也许某些条目包含非数字值?

文档建议使用colClasses参数。

dt <- fread("data.csv", header = T, colClasses = c("numeric", "character"))

文档中包含使用此参数的警告:

  

类(命名或未命名)的字符向量,如read.csv。或列名称或数字的矢量命名列表,请参阅示例。 fread中的colClasses用于罕见的覆盖,而不是常规使用。如果colClasses请求它,fread只会将列提升为更高的类型。由于会产生NAs,它不会将列降级为较低的类型。如果你真的需要数据丢失,你必须自己强制执行这些专栏。

答案 1 :(得分:0)

看起来好像fread命令会检测特定列中的类型,然后根据列包含的内容将最低类型分配给该列。来自fread documentation:

  

1,000行的样本用于确定列类型(100行   从10分)。 每列的最低类型选自   有序列表:逻辑,整数,整数64,双精度,字符。这个   使fread能够准确分配正确的行数   正确类型的列,前面一次。该文件当然可以   包含样本外部行中较高类型的数据。在那里面   例如,列类型在读取中间被触发并且数据被读取   以前的行是强制的。

这意味着如果您有一个主要包含数字类型值的列,则可能会将该列指定为numeric,但如果它稍后发现任何character类型值,则会强制读取任何内容指向character类型。

您可以阅读有关这些类型转化here的信息,但其长短似乎是尝试将character列转换为numeric以获取非数字值导致这些值转换为NA,或者double可能会转换为整数,从而导致精度损失。

您可能会因精度损失而感到满意,但fread不允许您使用colClasses进行此转换。您可能希望自己进入并删除非数字值。