我要加载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。
答案 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
进行此转换。您可能希望自己进入并删除非数字值。