【发布时间】:2014-05-06 19:08:45
【问题描述】:
我知道fread 相对较新,但它确实提供了很大的性能改进。我想知道的是,您可以从正在阅读的文件中选择行和列吗?有点像read.csv.sql 的作用?我知道使用fread 的select 选项可以选择要读取的列,但是只读取满足特定条件的行怎么样。
例如,可以使用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等来得出最终结果?还是会破坏使用fread 的目的?
作为参考,我必须阅读大约 800 个文件,每个文件包含大约 100,000 行和 10 列。 欢迎任何意见。
谢谢。
【问题讨论】:
-
最终,是的。只需在读取的每个文件中添加文件名作为列。然后将所有内容合并为一个大文件。
-
文档没有提到这样的功能。此外,当行的选择必须满足某些条件时(我想这是基于 df 中的信息),您必须先读取数据.....
-
我愿意:
ans = rbindlist(lapply(files, function(x) fread(x)[, fn := x]))。然后,在ans上进行一次子集化(假设子集条件相同)。 -
感谢您的建议。你能解释一下你在这里做什么吗?我还不太熟悉 R :)
-
@Arun 我想通了,这是一个很好的方法。唯一的问题是,由于文件很大,我不能一口气读完它们。事实上,仅读取 10 个文件就占用了我近 1.5 GB 的可用 RAM。所以我不得不求助于一个循环来一次读取几个文件,对它们进行子集化,然后清除内存。非常感谢您的帮助。
标签: r data.table