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

R语言dplyr如何按分组权重抽取指定占比随机样本

dplyr按自定义组占比完成固定总量抽样

常规分组后直接给sample_n传固定size值,会从每个组抽取等量观测,无法满足总样本量固定、各组占比自定义的需求。要实现总抽30条、三组占比70%/20%/10%的需求,只需要先按比例换算各组需要抽取的绝对样本量,再匹配到分组后按组抽样即可。

换算后各组抽样量为:

  • 第1组:30 * 70% = 21条
  • 第2组:30 * 20% = 6条
  • 第3组:30 * 10% = 3条

可直接运行的代码

注意:新版dplyr中sample_n已进入生命周期的退役阶段,官方推荐使用slice_sample替代,以下代码同时标注新旧版本写法

library(dplyr)

# 配置各组对应的抽样数量,组名按你实际数据的分组值填写即可
sample_rule <- tibble(
  Species = levels(iris$Species), # iris数据集的Species默认因子顺序对应第1/2/3组
  n = c(21, 6, 3)
)

# 关联抽样规则后分层抽样
sampled_data <- iris %>%
  inner_join(sample_rule, by = "Species") %>%
  group_by(Species) %>%
  # 新版dplyr使用这一行
  slice_sample(n = first(n))
  # 如果是旧版dplyr,将上一行替换为:sample_n(size = first(n))
  %>% ungroup()

结果校验

抽样完成后可运行以下命令确认样本量符合要求:

sampled_data %>% count(Species)

运行后会返回三组的样本数分别为21、6、3,总计30条,和预设的70%/20%/10%占比完全一致。

如果你的分组列不是因子类型,或者分组顺序和默认因子顺序不匹配,只需要调整sample_rule中的组名顺序,让其和你定义的第1/2/3组一一对应即可,不需要修改其他逻辑。

内容的提问来源于stack exchange,提问作者Samet Sökel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:21:31