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

如何通过循环生成无放回的不同比例数据子集?

用循环生成不同比例的无放回随机样本数据集

你需要从现有数据集生成多个无放回随机样本,对应的抽样比例为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:12:16