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

R语言如何从数据集抽取多个不同大小的有放回随机样本

错误原因

  • dplyr::rep_sample_n 函数的size参数仅支持传入单个整数值,无法直接传入多组样本量的向量,是直接报错的核心原因
  • 原代码中candidate_wells对象未定义,且抽样逻辑与后续lapply调用重复冲突,逻辑不通顺

可行实现方案

方案1:基础R实现(无需额外依赖)

# 示例数据集,替换为你实际的10000行数据集即可
dataset <- data.frame(ID = c("model0001", "model0002", "model0003", "model0004", "model0005",
                              "model0006", "model0007", "model0008", "model0009", "model0010"),
                      IL_NA = 1:10, PROD = 11:20, INJ = 21:30)

# 样本量定义,实际使用时替换为 seq(194,236,by=14) 即可
sizes <- seq(1,8,by=2)

# 生成不同样本量的有放回抽样结果,返回列表,每个元素对应一个样本量的抽样表
sample_set <- lapply(sizes, function(n) {
  dataset[sample(nrow(dataset), size = n, replace = TRUE), ]
})

# 可选:给列表元素命名,方便后续直接按样本量调用
names(sample_set) <- paste0("size_", sizes)

调用示例:获取样本量为3的抽样结果,直接使用sample_set$size_3即可。

方案2:tidyverse风格实现

如果你习惯使用dplyr系列工具,可以用slice_sample+purrr::map实现:

library(dplyr)
library(purrr)

# 数据集同上
dataset <- data.frame(ID = c("model0001", "model0002", "model0003", "model0004", "model0005",
                              "model0006", "model0007", "model0008", "model0009", "model0010"),
                      IL_NA = 1:10, PROD = 11:20, INJ = 21:30)

sizes <- seq(1,8,by=2)

sample_set <- map(sizes, ~ slice_sample(dataset, n = .x, replace = TRUE))
names(sample_set) <- paste0("size_", sizes)

扩展:每个样本量多次重复抽样

如果需要每个样本量重复多次抽样(比如每个样本量抽5次重复实验),可以加一层嵌套:

# 每个样本量重复抽样3次
rep_num <- 3
sample_set_multi <- lapply(sizes, function(n) {
  lapply(1:rep_num, function(r) {
    dataset[sample(nrow(dataset), size = n, replace = TRUE), ]
  })
})
names(sample_set_multi) <- paste0("size_", sizes)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:45:04