如何创建含无重复随机整数的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
相关产品推荐
相关产品推荐

