You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在R语言中存储100组规模为187的二项分布随机抽样结果?

解决从二项分布抽取100组样本并存储的R语言问题

嗨,我明白你现在的需求:要生成100组规模为187的二项分布随机样本,最终存成100列(每列187个观测值)的结构。你的现有代码已经能生成单组样本,只需要稍微调整,把生成逻辑包裹进循环里,再用矩阵来存储所有结果就行。

修改后的完整代码

# 先读取数据(这部分只需要执行一次)
mdata <- read.csv("c:/germany/st_it.csv", header = TRUE)
t <- read.csv("c:/germany/pt_new.csv", header = TRUE)
t1 <- t$PRO 
s <- mdata$st 
s1 <- mdata$it 
q <- 0.9946289 

# 初始化一个187行×100列的空矩阵,用来存放100组样本
results_matrix <- matrix(nrow = 187, ncol = 100)

# 循环100次,每次生成一组样本并存入矩阵
for (k in 1:100) {
  # 每次循环重新生成随机的b值(保证每组样本独立)
  b <- numeric(nrow(mdata))
  for (i in 1:(nrow(mdata))) { 
    b[i] <- rbinom(1, s[i], q^(s1[i])) 
  } 
  
  # 生成当前组的sus序列
  sus <- numeric(187) 
  sus[1] <- b[1] 
  for (j in 2:187) { 
    # 用普通if-else替代ifelse,单元素判断更清晰
    if (t1[j] == t1[j-1]) {
      sus[j] <- sus[j-1]
    } else {
      sus[j] <- b[j]
    }
  }
  
  # 将当前组的sus存入矩阵的第k列
  results_matrix[, k] <- sus
}

# (可选)转成数据框并命名列,方便后续导出
results_df <- as.data.frame(results_matrix)
colnames(results_df) <- paste0("sample_", 1:100)

# (可选)导出到CSV文件
write.csv(results_df, "c:/germany/100_binomial_samples.csv", row.names = FALSE)

关键修改说明

  • 用矩阵存储结果:提前创建好187行100列的矩阵,每一列对应一组抽样结果,避免每次生成样本后手动拼接的麻烦。
  • 外层循环控制抽样次数:新增了k从1到100的循环,把生成单组样本的逻辑完全包裹进去,确保每组样本都是独立生成的。
  • 每次循环重新生成b:因为rbinom是随机函数,每次执行都会产生新的随机值,所以把b的生成放在外层循环里,保证每组样本的b都是独立的,进而得到不同的sus序列。
  • 替换ifelseif-else:这里是对单个元素做条件判断,普通的分支语句比向量化的ifelse更直观,也不容易出现意外的向量处理问题。

这样处理后,results_matrix就是你需要的187行100列的结构,每一列都是一组187个观测值的样本;如果转成数据框results_df,还能方便地导出成CSV文件或者进行后续分析。

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

火山引擎 最新活动