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

按指定样本量从分组DataFrame中进行简单随机抽样的实现方法

当然可以!完全不用重复编写抽样代码就能实现按组指定不同样本量的需求,这里有两种简洁的方法供你参考:

方法1:用命名向量匹配分组样本量

先把你的样本量向量nj转换成命名向量,让每个名字对应strat的分组值,这样就能在分组后自动匹配对应组的抽样数量:

library(dplyr)

# 将nj转换为命名向量,名字对应strat的分组值
nj_named <- setNames(nj, c(1, 2, 3))

# 分组后按对应样本量抽样
new_df <- my.df %>%
  group_by(strat) %>%
  # 用cur_group()获取当前分组的strat值,匹配对应的样本量
  slice_sample(n = nj_named[as.character(cur_group()$strat)]) %>%
  ungroup()

注:dplyr 1.0.0及以上版本推荐使用slice_sample()替代sample_n(),功能更一致。如果用旧版本,把slice_sample(n = ...)换成sample_n(size = ...)即可。

方法2:合并样本量数据框后抽样

如果觉得命名向量不够直观,可以先创建一个包含分组和对应样本量的小数据框,和原数据合并后再分组抽样:

library(dplyr)

# 创建包含分组和对应样本量的小数据框
sample_sizes <- tibble(strat = c(1, 2, 3), n = nj)

# 合并后按组抽样
new_df <- my.df %>%
  left_join(sample_sizes, by = "strat") %>%
  group_by(strat) %>%
  # 每个组的n值都相同,取第一个即可
  slice_sample(n = first(n)) %>%
  select(-n) %>%  # 移除临时添加的样本量列
  ungroup()

额外提示

如果某个分组的现有观测数小于你指定的样本量,dplyr会默认返回该组所有观测并发出警告。如果需要强制抽取指定数量(允许重复抽样),可以在slice_sample()里加上replace = TRUE参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:11:19