使用data.table::fread读取特定的非连续行(相当于“;Select”;参数,但用于行)?

使用data.table::fread读取特定的非连续行(相当于“;Select”;参数,但用于行)?,r,data.table,rows,fread,R,Data.table,Rows,Fread,fread函数(data.table)允许用户使用'select'参数定义要读入的数据帧的特定列(例如fread(输入,选择=c(1,5,10))。我希望具有相同的功能,但对于行(例如fread(输入,选择行=c(1,4,47))。我可以在读取文件后执行此操作,但这需要很长时间,我希望通过只读取需要的行来优化此过程 我知道基于“文件内”条件以编程方式选择行的许多选项: …但我希望能够使用基于给定文件外部条件定义的向量来读取(如本文所述,但具体使用fread)。一种方法(尽管有点暴力)是使用s

fread函数(data.table)允许用户使用'select'参数定义要读入的数据帧的特定列(例如fread(输入,选择=c(1,5,10))。我希望具有相同的功能,但对于行(例如fread(输入,选择行=c(1,4,47))。我可以在读取文件后执行此操作,但这需要很长时间,我希望通过只读取需要的行来优化此过程

我知道基于“文件内”条件以编程方式选择行的许多选项:

…但我希望能够使用基于给定文件外部条件定义的向量来读取(如本文所述,但具体使用fread)。

一种方法(尽管有点暴力)是使用
sed
来剪切行

回想一下,
fread
接受
file=
以及
cmd=
,如中所示

库(data.table)
fwrite(iris,“iris.csv”)
fread(cmd=“head-n3 iris.csv”)
#萼片。长萼片。宽花瓣。长花瓣。宽种
#1:5.1 3.5 1.4 0.2刚毛
#2:4.9 3.0 1.4 0.2刚毛
(两行,因为
head
不知道/不关心头行。)

试试这个:


want\u行另一种选择可能是快速CSV(和其他格式)只读取需要的行的读卡器。我已经阅读了vroom的文档,但找不到可以定义我的读取行的参数。你能澄清一下吗?我认为这是一个仓促的建议。据称,当数据包含许多字符串列时,它真正的速度优势。对不起,我也很兴奋(这对我来说是新的):-)我喜欢这里的想法,我已经开始运行了——但不知何故,它读取整个文件的速度更快(对于我特定的5GB文件,我使用的行数少于10行),然后使用“want_rows”向量(32秒)对生成的矩阵进行子集,而不是使用“sed”选项(46秒)。但是,您的答案与我的要求完全一致,因此我将此标记为已接受的答案!这是一个有趣的问题。当然,您可能需要但不希望或无法实现的更好答案是“使用数据库”。