使用fread()选择行和列,read.csv.sql()的方式

时间:2014-05-06 19:08:45

标签: r data.table

我知道fread相对较新,但它确实提供了很好的性能提升。我想知道的是,您可以从正在阅读的文件中选择行和列吗?有点像read.csv.sql那样做了什么?我知道使用select的{​​{1}}选项可以选择要读取的列,但是如何仅读取满足特定条件的行。

例如,可以使用fread实现以下内容吗?

fread

如果这还不可能,是否建议阅读全部数据,然后使用read.csv.sql(file, sql = "select V2,V4,V7,V8,V9, V10 from file where V5=='CE' and V10 >= 500",header = FALSE, sep= '|', eol ="\n") 等来得出最终结果?或者它是否会破坏使用subset的目的?

作为参考,我必须阅读大约800个文件,每个文件包含大约100,000行和10列。 欢迎任何意见。

感谢。

1 个答案:

答案 0 :(得分:4)

目前无法选择fread()read.csv.sql()一样的行。但是,最好还是阅读整个数据(内存允许),然后根据您的标准对其进行子集化。对于200 MB的文件,fread() + subset()的效果比read.csv.sql()高出约4倍。

所以,使用@ Arun的建议,

ans = rbindlist(lapply(files, function(x) fread(x)[, fn := x]))
subset(ans, 'your criteria')

比原问题中的方法更好。