假设我有这个txt文件:
"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
read.csv
我可以:
> read.csv("linktofile.txt", fill=T, header=F)
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
然而fread
给出了
> library(data.table)
> fread("linktofile.txt")
V1 V2 V3 V4 V5 V6 V7
1: CC ad 2 2 2 2 2
我可以使用fread
获得相同的结果吗?
答案 0 :(得分:7)
目前不在;我不知道read.csv
的填充功能。该计划是添加读取双分隔文件(sep2
以及sep
中提到的?fread
)的功能。然后可变长度向量可以读入list
列,其中每个单元本身就是一个向量。但是,不要用NA填充。
可以将它添加到the list吗?这样,当状态发生变化时,您会收到通知。
那里有很多不规则的数据格式吗?我只记得看到常规文件,其中不完整的行将被视为错误。
更新:不太可能完成。 fread
针对常规分隔文件进行了优化(其中每行具有相同的列数)。但是,当list
实现时,不规则文件可以被读入sep2
列(每个单元本身就是一个向量);没有像read.csv
那样填写单独的列。
答案 1 :(得分:7)
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
不同,您必须向他们提供有关您尝试阅读的数据的一些信息,以帮助解决这些问题。
您可以使用" iotools"中的input.file
功能。通过指定列类型,您可以告诉formatter函数需要多少列。
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")