15

假设我有这个 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吗?

4

2 回答 2

9

主要更新

看起来开发计划发生了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")
于 2015-12-10T08:35:58.480 回答
8

不是现在; 我不知道read.csv' 的填充功能。计划是添加读取分隔文件的能力(sep2以及sep中提到的?fread)。然后可以将可变长度向量读入一list列,其中每个单元格本身就是一个向量。但是,不使用 NA 填充。

你能把它添加到列表中吗?这样,您会在其状态发生变化时收到通知。

有很多像这样的不规则数据格式吗?我只记得曾经看过常规文件,其中不完整的行将被视为错误。

更新:不太可能完成。fread针对常规分隔文件(每行具有相同的列数)进行了优化。但是,在实现时,可以将不规则文件读入list列(每个单元格本身就是一个向量)sep2read.csv没有像可以做的那样填写单独的列。

于 2013-09-03T17:36:43.860 回答