在R中高效地读取非常大的文本文件

在R中高效地读取非常大的文本文件,r,import,bigdata,R,Import,Bigdata,我有一个非常大的文本文件,有几百万行,包含像这样的普查数据 83400081732734890 2873846391010001944545 1829304000292399445 934745875985958344552 40599505500505055 3457584947597594933332 3938493840333398333 444234432346777927272 ... 每一行都包含一组基于给定宽度分隔的变量。在我上面的例子中,四行一起构成了一份完整的调查问卷。因此,

我有一个非常大的文本文件,有几百万行,包含像这样的普查数据

83400081732734890
2873846391010001944545
1829304000292399445
934745875985958344552
40599505500505055
3457584947597594933332
3938493840333398333
444234432346777927272
...
每一行都包含一组基于给定宽度分隔的变量。在我上面的例子中,四行一起构成了一份完整的调查问卷。因此,该示例显示了两份完整的调查问卷/两个访问的家庭

我想做的是只读取每个家庭的特定变量,因为读取整个文件需要太多时间。因此,我希望只读取文件中的特定行,而不将其完全加载到内存中

假设我只对包含在4行的每个块的第1行和第3行中的变量感兴趣,我怎么能强制R只读第1、3、5、7行

并且:除了只阅读相关行之外,是否有可能进一步将阅读限制在包含相关信息的每行的特定块上?例如,我只想读取第一行(834和405)的前三位数字和第三行(99445和98333)的最后五位数字

编辑


因为我想有选择性地阅读提供的解决方案并不能解决我的问题。此外,我无法设置SQL数据库,因为我在没有管理权限的Windows 7工作站上工作。我确实可以使用Powershell或类似工具中的命令行工具

如果原始文件足够规则,
scan
功能可以处理多行输入。不过,对于可变记录长度来说,这并不合适

 res <- scan(text="83400081732734890
 2873846391010001944545
 1829304000292399445
 934745875985958344552
 40599505500505055
 3457584947597594933332
 3938493840333398333
 444234432346777927272
 ", what=list(one="", two="", three="", four=""))  # one list element per , line;
                                                  # use "" for text

Read 2 records
> first <- lapply(res[1], substr, 1, 3)
> first
$one
[1] "834" "405"


> third <- lapply(res[3], function(x) substr(x , nchar(x)-4, nchar(x)))
> third
$three
[1] "99445" "98333"
res优先
一美元
[1] "834" "405"
>三分之一
三美元
[1] "99445" "98333"

另一种方法是使用
读取行
进行读取,这样您就可以不定期地选择除法标记。

@EricJ.-我不确定这是不是那个的复制品。这增加了选择某些块/行的要求。也许使用命令行工具(awk、sed等)在R之外处理文件可能会有好处?效果稍微好一点。非常感谢。