如何在R中生成各列值出现次数均等的1000行10列数据框
生成满足列频数要求的随机DataFrame
要实现你需要的1000行×10列DataFrame(每列中1-10的每个整数恰好出现100次),可以通过先构造每列的固定频数向量,再随机打乱的方式实现,具体方案如下:
核心思路
每列需要包含10个数值,每个数值重复100次(1000行 ÷ 10个值 = 100次),先为每列生成这种固定频数的向量,再对每列单独随机打乱顺序,最后合并成DataFrame即可。这种方式既能严格满足列的频数要求,又能保证整体的随机性。
简洁实现代码
# 生成10列,每列是打乱的、包含1-10各100次的向量 df <- as.data.frame(replicate(10, sample(rep(1:10, 100)))) # 可选:给列添加名称 colnames(df) <- paste0("Variable_", 1:10)
分步解释版本(更直观)
如果需要更清晰的分步逻辑,可以用以下代码:
# 定义基础参数 total_rows <- 1000 total_cols <- 10 value_range <- 1:10 repeat_count <- total_rows / length(value_range) # 计算每个值需要重复的次数:100 # 生成每一列并组合成DataFrame df <- data.frame( lapply(1:total_cols, function(_) { # 生成固定频数的向量:每个值重复100次 fixed_freq_vec <- rep(value_range, each = repeat_count) # 随机打乱向量顺序 sample(fixed_freq_vec) }) ) # 验证某一列的频数(以第一列为例) table(df[, 1])
为什么原方法不适用
你原来的foreach逐行采样方式,是随机生成每行的10个值,但无法控制列维度的频数——每列中各个值的出现次数是随机波动的,无法保证恰好出现100次,因此需要换用先固定列频数再打乱的思路。
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

