r - 如何在 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)
这将返回 alist
的长度times_to_sample
,其中的i
第 th 元素将为您提供 adata.frame
以及i
第 th 次复制的结果。
simplify=FALSE
防止simplify2array
将结果修改为不是特别有用的矩阵。
您还应该考虑添加一些稳健性检查 - 例如,您说您想要 5 到 10 行,但在将其概括为从行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), ])
可读性差一点,但肯定比重复 to 更有效sample(5:10, 1)
,即一次只有一个(不利用矢量化)
推荐阅读
- mysql - 字段 'category_id' 没有默认值 MySQL
- zsh - `scons run` 目标完成 zsh
- c# - 在索引视图页面中显示插入和更新数据的消息
- html - 在带有图像、标题和描述的 (html, css) 容器中;为什么描述不会在标题下方开始?
- javascript - Ajax 响应看起来未定义
- x86-64 - 看到 0 后将掩码设置为 0?
- date - 更正格式字符串以在 Haskell 中解析日期时间
- angular - VSCode 未绑定断点
- android - 不一致的 Android BLE 广告
- api - 如何使用 Twitter API 通过关键字和推文的对应位置收集推文?