填充fread的选项

时间:2013-09-03 16:47:22

标签: r data.table

假设我有这个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获得相同的结果吗?

2 个答案:

答案 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")