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

