我想在1到10之间生成2000个随机数,这样对于每个随机数我都有相同数量的实例。
在这种情况下,每个号码为200。
应该随机的是它的生成顺序。
我有以下问题:
我有一个包含2000个条目的数组但不是每个都有唯一值,例如它的开头是这样的:
11112233333333344445667777777777
并包含2000个条目。
我想生成随机数并为每个UNIQUE值分配一个单独的随机数,但每个值都有一个条目
所以我的预期结果如下:
original array: 11112233333333344445667777777777
random numbers: 33334466666666699991778888888888
答案 0 :(得分:5)
您可以通过几个步骤完成此操作:
my_numbers <- rep(1:10, each=200)
my_randomizer <- sample(seq_along(my_numbers), length(my_numbers))
my_random_numbers <- my_numbers[my_randomizer]
基于编辑:
我会使用rle
。听起来你没有数组,而是一个矢量:
my_array_rled <- rle(my_array)
my_random_numbers <- sample(1:10, length(unique(my_array)))
my_array_rled$values <- factor(my_array_rled$values)
levels(my_array_rled$values) <- my_random_numbers
my_array_randomized <- inverse.rle(my_array_rled)
答案 1 :(得分:1)
如果我理解正确,你可以使用“rep”复制你的随机数200次,然后“sample”来随机化你得到的矢量。
x <- sample(rep(runif(2000,1,10),200))
答案 2 :(得分:0)
非矢量化代码:
# using a seed for reproducible example
set.seed(2)
original_array <- c(1,1,1,1,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,6,6,7,7,7,7,7,7,7,7,7,7)
random_numbers <- numeric(length=length(original_array))
rdnum <- sample(unique(original_array), length(unique(original_array)))
for ( i in 1:length(unique(original_array)))
random_numbers[original_array == i] <- rdnum[i]
random_numbers
2 2 2 2 5 5 3 3 3 3 3 3 3 3 3 1 1 1 1 6 7 7 4 4 4 4 4 4 4 4 4 4
答案 3 :(得分:0)
table
函数与sample
在这种情况下非常方便:
set.seed(1)
## ASSUMING ORIGINAL IS A VECTOR
original <- c(1, 1, 1, 1, 2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,5,6,6,7,7,7,7,7,7,7,7,7,7)
## CREATE A TABLE OF ALL THE VALUES
tabl <- table(original)
## RNG is the sample range to select from. Assuming 1:10 in this example
RNG <- 1:10
## PICK VALUES RANDOMLY FROM RNG
tabl[] <- sample(RNG, length(tabl), replace=FALSE)
# note that the `names` of `tabl` will contain the values from `original`
# whereas the values of `tabl` will contain the new random value.
## ASSIGN NEW VALUES
randomNums <- original
for(i in seq(length(tabl)))
randomNums[ original==as.numeric(names(tabl))[[i]] ] <- tabl[[i]]
rbind(orig=original, rand=randomNums)
orig: 1 1 1 1 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 5 6 6 7 7 7 7 7 7 7 7 7 7
rand: 3 3 3 3 4 4 5 5 5 5 5 5 5 5 5 7 7 7 7 2 8 8 9 9 9 9 9 9 9 9 9 9