我正在尝试从具有不同大小的数据框中获取随机样本。 示例第一个样本应该只有8个观察值 第二个样本可以有10个观测值 第三可以有12个观察
df [sample(nrow(df),10),]
当我采样时,这给了我固定的10个观测值
在理想情况下,我有100个观测值,这些观测值应分为三组,而不能替换,每组可以有任意数量的观测值。示例第1组有45个观测值,第2组有20个观测值,第3组有35个观测值。
任何帮助将不胜感激
答案 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行之间,但是将其概括为从simplify2array
到a
行,以确保b
,a >= 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), ])
(即一次仅一次(不利用矢量化))可读性要差一些,但肯定比它更有效。