只读取R中Stata .DTA文件的一部分

Ari*_*man 9 r processing-efficiency stata

如果在某处有一个简单的答案,我会提前道歉.这似乎是那样的事情,但我似乎无法通过搜索SO或谷歌搜索在帮助文件中找到它.

我现在正在使用几个GB的数据集.它足以适应我有权访问的其中一个集群节点的内存,但需要花费相当多的时间来加载.对于使用此数据的许多调试/编程活动,我不需要加载整个文件,只需要在前几千个观察点上有一个数据集来测试代码.我当然可以只读取整个文件和子集,但我想知道是否有办法告诉read.dta()只读前N行?这当然要快得多.

我也可以使用像.csv这样的正确格式,然后使用read.csv()'s nrows参数,但是我会丢失Stata数据集中的因子标签(并且必须从其他人的代码中重新创建相当多的GB数据.这个项目.因此首选.dta文件的直接解决方案.

Jos*_*ich 9

Stata的二进制文件是逐行写入的,因此您可以更改R_LoadStataData函数stataread.c以限制读入的行数.但是,这只有在您不需要值标签时才会起作用,因为它们是在末尾写入的.文件,并要求您阅读整个文件 - 这不会节省任何时间.


Jor*_*eys 7

这将是一个困难的,因为do_readStata引擎盖下的功能是编译代码,只能接收整个文件.我相信一般二进制文件很难逐行读取,并且.dta是二进制格式.此外,R的本机二进制格式不允许在读入时从数据集中选择多行.

在我看来,您可以更好地从Stata中创建一组测试文件(例如,Stata代码sample 1000, count将为您提供来自已加载数据集的1000个观测值的样本),并使用它们.如果您无法访问Stata,项目中的其他人应该能够为您执行此操作.