在R中生成覆盖75%组合、规模约15000的5变量5水平数据集方法求助
R语言生成指定要求的模拟数据集
实现步骤与代码
- 生成所有变量组合
首先用expand.grid()生成x1到x5的全部3125种水平组合:
# 生成所有可能的变量组合 full_combinations <- expand.grid( x1 = 1:5, x2 = 1:5, x3 = 1:5, x4 = 1:5, x5 = 1:5 )
- 抽取75%的目标组合
计算需要保留的组合数(约2344个),并随机抽取:
# 计算目标组合数(75%总组合数) target_combo <- round(nrow(full_combinations) * 0.75) # 随机选中目标组合 selected_combo <- full_combinations[sample(nrow(full_combinations), target_combo), ]
- 生成约15000条观测数据
这里提供两种实现方式,按需选择:
方式一:均匀分配重复次数(每个组合重复次数差异极小)
这种方式会让每个选中的组合重复次数基本一致,总观测数刚好15000:
target_n <- 15000 # 基础重复次数 base_rep <- target_n %/% target_combo # 需要额外多重复1次的组合数 extra_rep <- target_n %% target_combo # 给选中的组合分配重复次数 selected_combo$rep <- base_rep selected_combo$rep[sample(nrow(selected_combo), extra_rep)] <- base_rep + 1 # 展开成最终数据集 final_data <- selected_combo[rep(seq_len(nrow(selected_combo)), selected_combo$rep), ] # 移除重复次数列 final_data$rep <- NULL # 随机打乱行顺序(可选) final_data <- final_data[sample(nrow(final_data)), ]
方式二:随机重复抽样(重复次数更随机)
直接从选中的组合中有放回抽样15000次,实现更简单:
target_n <- 15000 # 有放回抽样生成最终数据集 final_data <- selected_combo[sample(nrow(selected_combo), target_n, replace = TRUE), ] # 随机打乱行顺序(可选) final_data <- final_data[sample(nrow(final_data)), ]
验证结果
可以用以下代码确认数据集是否符合要求:
# 查看总观测数 nrow(final_data) # 查看覆盖的组合数 length(unique(apply(final_data, 1, paste, collapse = "-")))
内容的提问来源于stack exchange,提问作者EB3112
相关产品推荐
相关产品推荐

