我正在尝试阅读一个列CSV
文件至R
尽快。我希望将标准方法将列放入 RAM 所需的时间减少 10 倍。
我的动机是什么?我有两个文件;一个叫Main.csv
这是 300000 行和 500 列,其中一个称为Second.csv
即 300000 行和 5 列。如果我system.time()
命令read.csv("Second.csv")
,需要 2.2 秒。现在,如果我使用下面两种方法之一来读取第一列Main.csv
(这是大小的 20%Second.csv
因为它是 1 列而不是 5),因此将花费 40 秒以上。这与读取整个 600 MB 文件所需的时间相同——显然是不可接受的。
-
Method 1
colClasses <- rep('NULL',500)
colClasses[1] <- NA
system.time(
read.csv("Main.csv",colClasses=colClasses)
) # 40+ seconds, unacceptable
-
Method 2
read.table(pipe("cut -f1 Main.csv")) #40+ seconds, unacceptable
如何减少这个时间呢?我希望有一个R
解决方案。
我会建议
scan(pipe("cut -f1 -d, Main.csv"))
这与最初的提案不同(read.table(pipe("cut -f1 Main.csv"))
)以几种不同的方式:
- 因为文件是逗号分隔的并且
cut
默认情况下采用制表符分隔,您需要指定d,
指定逗号分隔
-
scan()
比read.table
用于简单/非结构化数据读取。
根据 OP 的评论,这大约需要 4 秒而不是 40 秒以上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)