首页 > 解决方案 > 如何在 R 中以各种样本大小进行采样?

问题描述

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

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

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

在理想情况下,我有 100 个观察值,这些观察值应该放在 3 组中而无需替换,并且每组可以有任意数量的观察值。示例 第 1 组有 45 个观察值,第 2 组有 20 个观察值,第 3 组有 35 个观察值。

任何帮助将不胜感激

标签: rsampling

解决方案


您可以尝试使用replicate

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

这将返回 alist的长度times_to_sample,其中的i第 th 元素将为您提供 adata.frame以及i第 th 次复制的结果。

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), ])

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


推荐阅读