You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于data.frame的study列值为每个分组随机抽取不等数量的行

实现方案

你可以通过dplyr的分组抽样功能实现需求,先构造全量的expand.grid结果,再按study分组随机抽取不等行数即可,可运行代码如下:

library(dplyr)

# 构造全量基准数据,这里修正示例代码的笔误,将study设为1:3匹配后续的3个分组
full_data <- expand.grid(study = 1:3, outcome = rep(1:2, 2)) |> 
  arrange(study, outcome)

# 按study分组随机抽样,每个分组抽样行数在1~该组总行数之间完全随机
set.seed(123) # 固定随机种子方便复现结果,不需要可直接删除
result <- full_data |> 
  group_by(study) |> 
  slice_sample(n = sample(1:n(), size = 1)) |> # 每个组随机生成1到组内总数量的抽样行数
  ungroup()

# 查看输出结果
result

固定上述种子的示例输出如下(更换随机种子/删除种子后结果会随机变化):

# A tibble: 7 × 2
  study outcome
  <int>   <int>
1     1       1
2     1       2
3     1       1
4     2       2
5     2       1
6     3       1
7     3       2

示例结果中study1抽3行、study2抽2行、study3抽2行,符合每个分组行数完全随机的要求。如果需要自定义抽样行数的上下限,只需修改sample(1:n(), size = 1)的区间参数即可,比如要求每个组最少抽2行、最多抽4行,改为sample(2:min(4, n()), size = 1)即可。

内容的提问来源于stack exchange,提问作者Reza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:48:05