如何在 R 中使用不同的样本量进行采样?

How to sample with various sample size in R?

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

df[样本(nrow(df),10),]

当我取样时,这给了我固定的 10 个观察结果

在理想情况下,我有 100 个观察结果,这些观察结果应无放回地分成 3 组,每组可以有任意数量的观察结果。示例第 1 组有 45 个观察值,第 2 组有 20 个观察值,第 3 组有 35 个观察值。

任何帮助将不胜感激

您可以尝试使用 replicate:

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

这将 return 一个 list 长度 times_to_sample,第 i 个元素会给你一个 data.frame 的结果i 次复制。

simplify=FALSE 防止 simplify2array 将结果破坏成一个不是特别有用的矩阵。

您还应该考虑添加一些稳健性检查——例如,您说您想要 5 到 10 行,但将其概括为从 ab 行,您我想确保 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), ])

可读性稍差,但肯定比重复 sample(5:10, 1) 更有效,即一次只有一个(不利用向量化)