我有一个110亿价值的大矢量。不知道数据的分布,因此我想根据现有的概率/分布对500k数据点进行采样。在R中,可以加载到矢量中的值有限 - 2 ^ 31 -1这就是我打算手动进行采样的原因。
有关数据的一些信息:数据只是整数。其中许多都被重复多次。
large.vec <- (1,2,3,4,1,1,8,7,4,1,...,216280)
要在分布中创建500k样本的概率,我将首先创建概率序列。
prob.vec <- seq(0,1,,500000)
接下来,将这些概率转换为原始序列中的位置。
position.vec <- prob.vec*11034432564
我创建位置向量的原因是,在订购人口数据后,我可以在特定位置拍摄数据点。
现在我计算总体中每个整数值的出现次数。使用整数值及其计数创建数据框。我还为每个值创建间隔
integer.values counts lw.interval up.interval
0 300,000,034 0 300,000,034
1 169,345,364 300,000,034 469,345,398
2 450,555,321 469,345,399 919,900,719
...
现在使用位置向量,我确定哪个位置值落在哪个区间,并根据该区间得到该区间的值。
这样我相信我有一个人口样本。我从这个参考中得到了很大一部分想法, Calculate quantiles for large data。
我想知道是否有更好的方法?或者,如果这种方法可以合理,虽然粗略地给我一个很好的人口样本?
此过程确实需要一段合理的时间,作为位置向量,以便遍历数据框中的所有可能间隔。为此,我使用RHIPE使其并行。
我知道我能够这样做只是因为可以订购数据。
我不想在这里随机抽样,我试图“抽样”数据,保持底层分布不变。主要减少110亿至500k。