更快速地读取CSV文件的单列

use*_*361 13 csv io optimization performance r

我试图尽快读取CSV文件的单个列R.我希望在将列放入RAM 10倍的时间内减少标准方法.

我的动机是什么?我有两个文件; 一个称为Main.csv300000行和500列,一个称为Second.csv300000行和5列.如果我system.time()是命令read.csv("Second.csv"),则需要2.2秒.现在,如果我使用下面两种方法中的任何一种来读取第一列Main.csv(Second.csv因为它是1列而不是5列,它的大小是20%),它将花费超过40秒.这与读取整个600兆字节文件所用的时间相同 - 显然是不可接受的.

如何减少这个时间?我希望有一个R解决方案.

Ben*_*ker 13

我会建议

scan(pipe("cut -f1 -d, Main.csv"))
Run Code Online (Sandbox Code Playgroud)

这与原始提案(read.table(pipe("cut -f1 Main.csv")))的不同之处有两种:

  • 由于文件是逗号分隔的并且cut默认采用制表符分隔,因此您需要指定d,指定逗号分隔
  • scan()read.table简单/非结构化数据读取快得多.

根据OP的评论,这需要大约4秒而不是40秒.


mar*_*ino 9

在此博客中,可以快速比较读取大型CSV文件的方法. 恐惧是最快的一个数量级.

如上面的注释中所述,您可以使用select参数选择要读取的列 - 所以:

fread("main.csv",sep = ",", select = c("f1") ) 
Run Code Online (Sandbox Code Playgroud)

将工作