如何通过循环生成无放回的不同比例数据子集?
用循环生成不同比例的无放回随机样本数据集
你需要从现有数据集生成多个无放回随机样本,对应的抽样比例为90%、90%、80%、70%、60%、50%。你的原代码无法正常运行,问题出在变量命名未动态解析和比例计算不符合需求这两点,下面是修正后的实现方法:
原代码问题分析
- 变量名
data.SAMPLEDi中的i不会被R自动识别为循环变量,循环过程中只会重复覆盖同一个变量(甚至可能创建失败); - 你的循环
i in 0:5计算出的抽样比例是100%、90%、80%、70%、60%、50%,和你需要的两个90%样本不符。
解决方案
方案1:动态生成命名数据集(直接存入全局环境)
先定义好需要的抽样比例和对应的数据集名称(注意两个90%的名称要区分,避免覆盖),再通过循环生成并赋值:
# 加载dplyr包(如果没加载的话) library(dplyr) # 定义目标抽样比例 sample_ratios <- c(0.9, 0.9, 0.8, 0.7, 0.6, 0.5) # 定义每个样本对应的数据集名称 dataset_names <- c("90%sampled", "90%sampled_2", "80%sampled", "70%sampled", "60%sampled", "50%sampled") # 循环生成无放回样本 for (i in seq_along(sample_ratios)) { # 按指定比例抽样,replace=FALSE确保无放回 sampled_data <- dat %>% sample_frac(size = sample_ratios[i], replace = FALSE) # 将样本赋值到全局环境,使用自定义名称 assign(dataset_names[i], sampled_data, envir = .GlobalEnv) }
方案2:将所有样本存入列表(更推荐)
把所有生成的样本放在一个列表里,便于统一管理和调用,避免全局环境变量混乱:
library(dplyr) sample_ratios <- c(0.9, 0.9, 0.8, 0.7, 0.6, 0.5) dataset_names <- c("90%sampled", "90%sampled_2", "80%sampled", "70%sampled", "60%sampled", "50%sampled") # 创建空列表存储结果 sampled_list <- list() for (i in seq_along(sample_ratios)) { sampled_list[[dataset_names[i]]] <- dat %>% sample_frac(size = sample_ratios[i], replace = FALSE) } # 调用示例:获取第一个90%的样本 # sampled_list[["90%sampled"]]
内容的提问来源于stack exchange,提问作者SK77
相关产品推荐
相关产品推荐

