我知道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列。 欢迎任何意见。
感谢。
答案 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')
比原问题中的方法更好。