主要更新
看起来像是开发计划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
.
Unlike 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")