主要更新
看起来开发计划发生了fread
变化,fread
现在已经引起了fill
争论。
使用此答案末尾的相同示例数据,这就是我得到的:
library(data.table)
packageVersion("data.table")
# [1] ‘1.9.7’
fread(x, fill = TRUE)
# V1 V2 V3 V4 V5 V6 V7
# 1: AA 3 3 3 3 NA NA
# 2: CC ad 2 2 2 2 2
# 3: ZZ 2 NA NA NA NA NA
# 4: AA 3 3 3 3 NA NA
# 5: CC ad 2 2 2 2 2
安装“data.table”的开发版本:
install.packages("data.table",
repos = "https://Rdatatable.github.io/data.table",
type = "source")
原始答案
这不能回答您关于以下问题的问题fread
:@Matt 已经解决了这个问题。
但是,它确实为您提供了一个替代方案来考虑,它应该会给您带来比基础 R 更好的速度改进read.csv
。
与 不同fread
的是,您必须通过向它们提供有关您尝试读取的数据的一些信息来帮助这些功能。
您可以使用input.file
“iotools”中的功能。通过指定列类型,您可以告诉格式化程序函数需要多少列。
library(iotools)
input.file(x, formatter = dstrsplit, sep = ",",
col_types = rep("character", max(count.fields(x, ","))))
样本数据
x <- tempfile()
myvec <- c('"AA",3,3,3,3', '"CC","ad",2,2,2,2,2', '"ZZ",2', '"AA",3,3,3,3', '"CC","ad",2,2,2,2,2')
cat(myvec, file = x, sep = "\n")
## Uncomment for bigger sample data
## cat(rep(myvec, 200000), file = x, sep = "\n")