这是一个非常简化的示例,但希望它能让每个人都了解我在说什么:
real.length = c(10,11,12,13,13,13,13,14,15,50)
random.length = vector()
for (i in 1:length(real.length)){
random.length[i] = sample(min(real.length):max(real.length),1)
}
(注意:我知道我可以说 random.length=sample(min:max,10) 但我需要在我的真实代码中使用循环。)
我希望我的随机长度与我的实际长度有相似的范围,但也有相似的分布。我试过 rnorm 但我的真实数据没有正态分布,所以我认为这不会起作用,除非我错过了一些选项。
是否可以使用我的真实数据设置示例函数的概率?因此,在这种情况下,给出 10-15 之间数字的较高权重/概率,以及 50 等高数字的较低权重/概率。
编辑:使用詹姆斯的解决方案:
samples = length(real.length)
d = density(real.length)
random.length = d$x[findInterval(runif(samples+100),cumsum(d$y)/sum(d$y))]
random.length = subset(random.length, random.length>0)
random.length = random.length[1:samples]