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

R-Studio数据筛选:抽取覆盖所有变量取值的50%样本方法咨询

实现覆盖所有变量取值的分层抽样方案

核心思路

先抽取「必选样本集」保证所有分类字段的所有取值至少出现1次,再从剩余样本中随机补抽至总样本量的50%,既满足覆盖要求也符合随机抽样的特性。

调整后代码

library(dplyr)
# 1. 定义需要全覆盖所有取值的分类字段
cover_cols <- c("PRODUCT_TYPE", "OFFER", "INENTORY")

# 2. 生成必选样本集:每个字段的每个取值各抽1条,合并后去重
mandatory_samples <- lapply(cover_cols, function(col) {
  data2 %>% 
    group_by(across(all_of(col))) %>% 
    slice_sample(n = 1) %>% 
    ungroup()
}) %>% 
  bind_rows() %>% 
  distinct(ID, .keep_all = TRUE)

# 3. 计算目标样本量与待补抽数量
total_rows <- nrow(data2)
target_rows <- floor(total_rows * 0.5)
add_rows <- target_rows - nrow(mandatory_samples)

# 异常校验:必选样本量超过目标值时抛出提示
if (add_rows < 0) {
  stop("必选覆盖样本量已超过总样本的50%,请调高抽样比例")
}

# 4. 补抽剩余样本后合并得到最终子集
add_samples <- data2 %>% 
  filter(!ID %in% mandatory_samples$ID) %>% 
  slice_sample(n = add_rows)

subset1 <- bind_rows(mandatory_samples, add_samples)

代码说明

  • 如果需要覆盖的字段有调整,直接修改cover_cols向量的内容即可
  • 用distinct(ID, .keep_all = TRUE)去重是为了避免同一条记录同时覆盖多个字段取值时被重复计入,浪费样本量
  • 校验逻辑可以避免样本量过小、必选需求超过抽样比例的异常场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 11:06:06