只读大文本文件中满足特定条件的行
Posted
技术标签:
【中文标题】只读大文本文件中满足特定条件的行【英文标题】:Read only lines from a large text file which fulfill specific condition 【发布时间】:2017-03-11 05:42:22 【问题描述】:我有一个包含 3 列的大文件(data.txt,35 GB)。 该文件的一些示例部分如下所示:
... ... ...
5 701565 8679.56
8 1.16201e+006 3193.18
1 1.16173e+006 4457.85
14 1.16173e+006 4457.85
9 1.77942e+006 7208.73
4 1.78011e+006 8239.88
14 1.78019e+006 8195.57
9 2.00206e+006 8858.55
4 2.00199e+006 7924
... ... ...
当第二列中的值介于 0 和 50'000 之间时,我想为第三列绘制直方图。
然后我想做另一个直方图,其中第一列的值在 50'000 和 100'000 之间。以此类推。
我不知道如何一次只加载/读取我需要的数据。任何帮助将不胜感激!
如果我应该使用 sqldf 包,那么我的问题是我怎么能说第二列的值应该小于例如50'000?
与How do i read only lines that fulfil a condition from a csv into R? 的区别在于我没有任何列名。因此,我无法按照他们在解决方案中提出的建议:
sql = "从 Sepal.Length > 5 的文件中选择 *"
【问题讨论】:
也许您可以为此使用sqldf
包。请参阅these search results 以获得一些灵感。
我没有任何列名。因此我不知道如何使用 sqldf 进行子集化?
您是否考虑过仅命名 csv 文件中的列? csv 的结构非常简单,你可以只使用 Notepad++...
您可以尝试: 1. 创建新的 txt 文件(称为 aaa,因此它位于文件夹的顶部) 2. 打开并放置上面的第一行 3. 将文件从 txt 重命名为扩展名 csv 4. 将两个文件放在一个文件夹中 5. 通过命令合并文件(Windows 例如link)。这将创建一个具有适当列的新 csv 文件。有点hacky,但我以前在类似的问题中使用过它。
@Fabi;查看链接副本中 Dirk 的答案 - 它不使用列标题
【参考方案1】:
我认为readr
的最新版本支持这种事情。以下内容仅改编自readr::read_csv_chunked
的帮助
library(readr)
f <- function(x, pos) subset(x, X3 > 0 & X3 < 50000)
df <- read_csv_chunked(
'test.csv',
DataFrameCallback$new(f),
chunk_size = 100000,
col_names = F
)
【讨论】:
以上是关于只读大文本文件中满足特定条件的行的主要内容,如果未能解决你的问题,请参考以下文章