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

在R中按区域/行业及status条件构建均等权重抽样数据集

按行业-区域组合分层随机抽样的R语言实现方案

嘿,我之前刚好处理过一模一样的抽样需求,给你一套靠谱的代码,完美实现你要的每个行业+区域组合下,分别随机抽取30条status=0和status=1的样本~

核心思路

我们需要按行业、区域、status三个维度分层,确保每个细分组都抽取固定数量的样本,最终得到均等权重的数据集。这里推荐用dplyr包来实现,代码简洁易懂,新手也能快速上手。

完整代码实现

假设你的原始数据集名为raw_data,包含industry(行业列,共4个类别)、region(区域列,共10个类别)、status(状态列,取值0或1)这三个关键字段:

# 先安装并加载dplyr包(如果还没安装的话)
if (!require(dplyr)) {
  install.packages("dplyr")
  library(dplyr)
}

# 执行分层抽样
sampled_data <- raw_data %>%
  # 按三个维度分组,确保每个组合单独抽样
  group_by(industry, region, status) %>%
  # 每个组随机抽取30条样本,replace=FALSE表示无放回抽样(需保证每个组原始样本量≥30)
  # 若某组样本量不足30,可将replace改为TRUE启用有放回抽样,或先检查原始数据分布
  slice_sample(n = 30, replace = FALSE) %>%
  # 取消分组,方便后续数据处理
  ungroup()

# 验证抽样结果是否符合要求(可选)
sampled_data %>%
  count(industry, region, status)

备选方案:data.table版本

如果你习惯用data.table处理大数据,这里也提供对应的实现代码,运行效率会更高:

# 安装并加载data.table包
if (!require(data.table)) {
  install.packages("data.table")
  library(data.table)
}

# 转换为data.table格式并抽样
setDT(raw_data)
sampled_data <- raw_data[, .SD[sample(.N, 30, replace = FALSE)], by = .(industry, region, status)]

注意事项

  • 最终抽样后的总样本量应为 30×2×4×10=2400 条,你可以用nrow(sampled_data)验证。
  • 如果某个行业-区域-status组合的原始样本量不足30,代码会抛出错误。这时候要么调整抽样策略(比如有放回抽样),要么补充原始数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:09:27