我想根据特定条件重复采样值。例如,我想创建一个100个值的样本。 概率为0.7时将从一个分布中采样,否则从另一个概率中采样。
这是一种实现我想要的方式:
set.seed(20)
A<-vector()
for (i in 1:100){
A[i]<-ifelse(runif(1,0,1)>0.7,rnorm(1, mean = 100, sd = 20),runif(1, min = 0, max = 1))
}
我肯定还有其他更优雅的方法,而无需使用for循环。 有什么建议吗?
答案 0 :(得分:4)
您可以对一个指标进行采样,该指标定义了您从中得出的分布。
ind <- sample(0:1, size = 100, prob = c(0.3, 0.7), replace = TRUE)
A <- ind * rnorm(100, mean = 100, sd = 20) + (1 - ind) * runif(100, min = 0, max = 1)
在这种情况下,您无需使用for循环,而是需要对更多随机变量进行采样。
答案 1 :(得分:2)
如果时间百分比不是随机的,则可以绘制每个分布的正确数量,然后随机排列结果:
n <- 100
A <- sample(c(rnorm(0.7*n, mean = 100, sd = 20), runif(0.3*n, min = 0, max = 1)))