【发布时间】:2020-09-11 09:22:47
【问题描述】:
我正在使用 R 访问 csv。但是我不希望整个数据集都在内存中,因为数据集太大了。但我需要根据一列的类别读取行。
我只想读取 col2 = 'A' 的行
示例:
col1 col2 col 3
1 A 1000
2 B 2000
3 A 1000
4 A 2000
5 A 1000
6 B 2000
【问题讨论】:
我正在使用 R 访问 csv。但是我不希望整个数据集都在内存中,因为数据集太大了。但我需要根据一列的类别读取行。
我只想读取 col2 = 'A' 的行
示例:
col1 col2 col 3
1 A 1000
2 B 2000
3 A 1000
4 A 2000
5 A 1000
6 B 2000
【问题讨论】:
您可以尝试使用data.table 包中的fread 和cmd 选项。来自documentation:
预处理文件的shell命令;例如fread(cmd=paste("grep",word,"filename")。查看详情。
Shell 命令:
fread 为方便起见接受 shell 命令。输入命令运行并将其输出写入 tmpdir 中的文件(默认为 link{tempdir}()),“正常”应用 fread。细节取决于平台——系统用于 UNIX 环境,否则使用 shell;见系统。
所以如果你运行类似
library(data.table)
t <- fread(......., cmd=paste("grep","' A '","filename"), .....)
然后它过滤包含A(由空格包围的A)的行,然后将fread应用于结果。
【讨论】:
vroom会很有用
vroom 包,看起来很有趣。谢谢
我们可以使用sqldf
library(sqldf)
df1 <- read.csv.sql("file.csv", "select *, from file where col2 = 'A'", sep=",")
【讨论】:
其中一个应该可以解决问题:
fread(file=file_name, select=col_names)[specific_col_name %in% ID_name]
或
fread(file=file_name, select=col_names)[grep(pattern, specific_col_name, ignore.case = TRUE)]
【讨论】: