如何在R中以各种样本大小进行采样?

时间:2019-07-27 09:49:54

标签: r sampling

我正在尝试从具有不同大小的数据框中获取随机样本。 示例第一个样本应该只有8个观察值 第二个样本可以有10个观测值 第三可以有12个观察

df [sample(nrow(df),10),]

当我采样时,这给了我固定的10个观测值

在理想情况下,我有100个观测值,这些观测值应分为三组,而不能替换,每组可以有任意数量的观测值。示例第1组有45个观测值,第2组有20个观测值,第3组有35个观测值。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以尝试使用replicate

times_to_sample = 5L
NN = nrow(df)
replicate(times_to_sample, df[sample(NN, sample(5:10, 1L)), ], simplify = FALSE)

这将返回一个长度为list的{​​{1}},其中第times_to_sample个元素将为您提供一个i,其结果为第data.frame复制。

i阻止simplify=FALSE将结果整理到一个不是特别有用的矩阵中。

您还应该考虑添加一些健壮性检查-例如,您说要在5到10行之间,但是将其概括为从simplify2arraya行,以确保ba >= 1

如果b <= nrow(df)会很大,那么从times_to_sample处获取所有样本的效率会更高:

5:10

比重复idx = sample(5:10, times_to_sample, replace = TRUE) lapply(idx, function(i) df[sample(NN, i), ]) (即一次仅一次(不利用矢量化))可读性要差一些,但肯定比它更有效。