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

如何创建含无重复随机整数的R DataFrame?附可行实现代码

创建含无重复随机整数的R数据框

看起来你想要生成一个13行30列的R数据框,其中每一列都是无重复的随机整数对吧?不过你当前的代码有个小问题:你初始化的数据框是13行,但循环里生成了30个随机数,还试图赋值给某一行,这会因为长度不匹配抛出错误。我来帮你修正并优化这个实现:

修正后的可运行代码

# 先从exc_ret中获取随机整数的范围上限(去掉Date列后的列数)
target_range <- 1:ncol(subset(exc_ret, select = -c(Date)))

# 初始化13行30列的空数据框
rank_random <- data.frame(matrix(NA, nrow = 13, ncol = 30))

# 遍历每一列,生成无重复随机整数并赋值
for (col_idx in 1:30) {
  # 生成13个无重复的随机整数,匹配数据框的行数
  rank_random[, col_idx] <- sample(target_range, size = 13, replace = FALSE)
}

关键修正点说明

  • 修复长度不匹配问题:把sample的size参数从30改成13,和数据框的行数对应;同时把赋值对象从rank_random[col_idx,](某一行)改成rank_random[, col_idx](某一列),确保数据能正确填入。
  • 代码可读性优化:把seq(1:30)简化成1:30,给变量起了更清晰的名字target_range和col_idx,后续维护起来更方便。

更简洁的向量化实现(推荐)

如果你想避免写循环,R里可以用replicate函数一次性生成所有列,代码更简洁高效:

target_range <- 1:ncol(subset(exc_ret, select = -c(Date)))
rank_random <- as.data.frame(replicate(30, sample(target_range, size = 13, replace = FALSE)))

replicate(30, ...)会重复执行30次随机抽样操作,直接生成30列的矩阵,再转成数据框,省去了循环的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:32:14