在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
相关产品推荐
相关产品推荐

