如何在 R 中逐行匹配模式读取非常大的文件
How to read very large files line by line matching patterns in R
我需要在 R 中读取至少 10 GB 大小的文件。为了限制内存使用,我只想读取那些匹配模式的行。例如,在下面的文本文件 mytext.tsv
中,我想从将成为 header 的想要的行中读取。然后从 col2
中读取匹配 coding
和 synonymous
的行,即 patterns
.
patterns <- c("coding", "synonymous")
mytext.tsv:
## lines unwanted
## lines unwanted1
## lines unwanted2
## lines unwanted3
wanted col1 col2
aaa variant1 coding
jhjh variant2 non-coding
ggg variant3 synonymous
fgg variant4 coding
gdg variant6 missense
我预期的数据框应该是:
wanted col1 col2
aaa variant1 coding
ggg variant3 synonymous
我知道我可以使用连接和扫描然后遍历每个模式,但是在 R 中有没有有效的方法来做到这一点?
我的实际数据示例:
使用 data.table 和 cmd 选项和 grep(未测试) :
library(data.table)
fread(cmd = "grep 'coding\|synonymous' mytext.tsv",
col.names = c("wanted", "col1", "col2"))
注:
- 这将适用于 *nix 系统。在 Windows 上有一个
findstr
命令。
- 正则表达式需要更新以适合您的数据。这只是一个示例,它还会 return 在搜索“编码”等时显示“非编码”行
我需要在 R 中读取至少 10 GB 大小的文件。为了限制内存使用,我只想读取那些匹配模式的行。例如,在下面的文本文件 mytext.tsv
中,我想从将成为 header 的想要的行中读取。然后从 col2
中读取匹配 coding
和 synonymous
的行,即 patterns
.
patterns <- c("coding", "synonymous")
mytext.tsv:
## lines unwanted
## lines unwanted1
## lines unwanted2
## lines unwanted3
wanted col1 col2
aaa variant1 coding
jhjh variant2 non-coding
ggg variant3 synonymous
fgg variant4 coding
gdg variant6 missense
我预期的数据框应该是:
wanted col1 col2
aaa variant1 coding
ggg variant3 synonymous
我知道我可以使用连接和扫描然后遍历每个模式,但是在 R 中有没有有效的方法来做到这一点?
我的实际数据示例:
使用 data.table 和 cmd 选项和 grep(未测试) :
library(data.table)
fread(cmd = "grep 'coding\|synonymous' mytext.tsv",
col.names = c("wanted", "col1", "col2"))
注:
- 这将适用于 *nix 系统。在 Windows 上有一个
findstr
命令。 - 正则表达式需要更新以适合您的数据。这只是一个示例,它还会 return 在搜索“编码”等时显示“非编码”行