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

使用R模拟含分布与缺失值的600行3000列数据框

R模拟符合要求的矩阵/数据框

以下是完整的实现代码,完全满足你的需求:

# 设置随机种子保证结果可重复
set.seed(123)

# 1. 创建空矩阵并设置行名列名
n_rows <- 600
n_cols <- 3000
sim_data <- matrix(nrow = n_rows, ncol = n_cols)
rownames(sim_data) <- paste0("id", 1:n_rows)
colnames(sim_data) <- paste0("g", 1:n_cols)

# 2. 分配正态分布列和右偏分布列的数量(可调整比例)
# 随机选择1200-1800列为正态分布,剩余为右偏分布
n_normal <- sample(1200:1800, 1)
normal_cols <- sample(1:n_cols, n_normal)
skewed_cols <- setdiff(1:n_cols, normal_cols)

# 3. 生成正态分布列数据
for (col in normal_cols) {
  # 随机生成该列的均值(0.11-1.08)和标准差(0.01-0.2)
  col_mean <- runif(1, min = 0.11, max = 1.08)
  col_sd <- runif(1, min = 0.01, max = 0.2)
  sim_data[, col] <- rnorm(n_rows, mean = col_mean, sd = col_sd)
}

# 4. 生成轻度右偏分布列数据(用Gamma分布,shape=3保证轻度右偏)
for (col in skewed_cols) {
  # 随机生成该列的均值(0.11-1.08)
  col_mean <- runif(1, min = 0.11, max = 1.08)
  # 设置shape=3,计算对应的rate使得均值=shape/rate
  col_shape <- 3
  col_rate <- col_shape / col_mean
  sim_data[, col] <- rgamma(n_rows, shape = col_shape, rate = col_rate)
}

# 5. 添加缺失值(整体占比30%-40%)
missing_pct <- runif(1, min = 0.3, max = 0.4)
# 随机选择要设为NA的位置
na_positions <- sample(length(sim_data), size = round(length(sim_data)*missing_pct))
sim_data[na_positions] <- NA

# 可选:转成数据框格式
sim_data_df <- as.data.frame(sim_data)

代码解释:

  • 随机种子:set.seed(123)确保每次运行生成的结果一致,方便调试。
  • 行名列名:用paste0批量生成id1-id600和g1-g3000,直接赋值给矩阵的rownames和colnames。
  • 分布列分配:通过sample随机选择正态分布列的数量和具体列,你可以根据需求调整1200:1800的范围来改变两类列的比例。
  • 正态分布生成:每列单独随机生成均值和标准差,保证不同列的正态分布参数不同,符合要求。
  • 轻度右偏分布:选用Gamma分布,设置shape=3时分布呈轻度右偏;通过调整rate参数让每列的均值落在0.11-1.08区间内。
  • 缺失值添加:先随机确定缺失比例(30%-40%),再通过sample从矩阵所有元素中随机选择对应数量的位置设为NA,保证整体缺失率符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:06:27