我希望生成一个随机数字序列,其中包含1和1之间的14个数字。 25(含)。我可以使用> sample (1:25, 14)
在R中执行此操作。但是,对于某些序列,我需要排除某些数字(2,3,4,5,6,16,21等)。我还需要确保某些数字不在序列的前4个数字内(即1-6,66,21等)。我还需要某些序列,其中某些数字在第5和第14位之间出现两次。
很抱歉,如果不清楚,但我基本上需要R中的随机数序列生成器
如果有人知道可以做到这一点的功能,我将非常感激。
感谢。
答案 0 :(得分:3)
此功能可以满足您的需求:
specialSample <- function(yourSample, sampleTimes, exclusion, firstFour, appearTwice){
excludedSample <- yourSample[!yourSample%in%exclusion]
first <- sample(excludedSample,1,prob=excludedSample%in%firstFour)
firstposition <- sample(1:4,1)
second <- sample(excludedSample,1,prob=excludedSample%in%appearTwice)
twice <- c(second,second)
sampler <- sample(excludedSample,sampleTimes-length(exclude),replace=TRUE)
positions <- sample(5:14,2)
result <- sampler
result[firstposition] <- first
result[positions] <- twice
return(result)
}
参数是
yourSample
是您正在采样的序列
sampleTimes
您的样本中需要多少个值(如果您需要replace=TRUE
,我已指定replace=FALSE
,那么length(sampleTimes)
必须<length(yourSample)
< / p>
exclusion
是您要排除的数字
firstFour
您希望其中一个成为前四个
appearTwice
个数字
> numbers <- 1:25
> exclude <- c(2,4,8)
> firstFour <- 1:4
> appearTwice <- c(11,12)
> test <- specialSample(numbers,25,exclude,firstFour,appearTwice)
!> test
[1] 12 23 3 9 10 10 21 12 7 17 24 15 22 12 3 14 9 9 1 6 19 15
基本思想是利用向量vec[positionN]<-value
的索引和抽样概率来获得所需位置的值。