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

如何在R中一次性从DataFrame生成多个无放回随机样本?

批量生成无放回随机样本的R解决方案

基础R循环方法

适合不想额外加载包的场景,用循环批量生成样本并存入列表:

# 你的原始数据
data <- data.frame(x1 = 1:100,
                   x2 = "x",
                   x3 = "y")

# 创建空列表,用来存储50个样本DataFrame
sample_list <- list()

# 循环生成50个无放回样本
for(i in 1:50) {
  # 从原始数据中无放回抽取10行
  sample_list[[i]] <- data[sample(nrow(data), 10, replace = FALSE), ]
}
  • 生成的每个样本都存在sample_list里,取第N个样本用sample_list[[N]]即可。

tidyverse简洁方法

如果你已经在使用dplyr,搭配purrr包的map函数可以更简洁地实现:

library(tidyverse)

# 原始数据
data <- data.frame(x1 = 1:100,
                   x2 = "x",
                   x3 = "y")

# 一键生成50个样本,结果存入列表
sample_list <- map(1:50, ~ sample_n(data, 10, replace = FALSE))
  • map函数会自动循环50次执行sample_n,每个循环结果作为列表的一个元素,用法和上面的列表一致。

重要说明

如果你的需求是50个样本之间完全没有重复行,那100行数据最多只能生成10个10行的样本(10×10=100),无法达到50个的要求。上面的两种方法都是每次从原始数据中独立无放回抽取10行,样本之间可能存在重复的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:48:19