来自档案的文件的fread()

时间:2015-10-26 08:02:02

标签: r data.table

我想知道从存档文件中读取data.table的推荐方法是什么(在我的情况下是zip存档)。一个显而易见的选择是将其解压缩到一个临时文件,然后像往常一样fread()。我不想打扰创建新文件,因此我使用read.table()连接中的unz(),然后将其转换为data.table()

mydt <- data.table(read.table(unz(myzipfilename, myfilename)))

这种方法很好但read.table()对于大文件来说速度很慢,而fread()无法直接读取unz()连接。我想知道是否有更好的解决方案。

1 个答案:

答案 0 :(得分:11)

看看:Read Ziped CSV File with fread 为了避免tmp文件,你可以使用解压缩-p提取文件来管道,没有消息

你可以在fread中使用这种语句。

+----------+----------+----------+
|antecedent|consequent|confidence|
+----------+----------+----------+
|[t,s,y]   |[x]       |1.0       |
|[t,s,y]   |[z]       |1.0       |
|[y,x,z]   |[t]       |1.0       |
|[y]       |[x]       |1.0       |
|[y]       |[z]       |1.0       |
|[y]       |[t]       |1.0       |
|[p]       |[r]       |1.0       |
|[p]       |[z]       |1.0       |
|[q,t,z]   |[y]       |1.0       |
|[q,t,z]   |[x]       |1.0       |
|[q,y]     |[x]       |1.0       |
|[q,y]     |[z]       |1.0       |
|[q,y]     |[t]       |1.0       |
|[t,s,x]   |[y]       |1.0       |
|[t,s,x]   |[z]       |1.0       |
|[q,t,y,z] |[x]       |1.0       |
|[q,t,x,z] |[y]       |1.0       |
|[q,x]     |[y]       |1.0       |
|[q,x]     |[t]       |1.0       |
|[q,x]     |[z]       |1.0       |
+----------+----------+----------+
only showing top 20 rows

或使用gunzip

x = fread('unzip -p test/allRequests.csv.zip')

您也可以使用grep或其他工具。