Как разбить число случайным образом на несколько чисел, учитывая число и n групп?


Например, если число равно 100, а число групп равно 4, он должен дать любой случайный список из 4 чисел, которые складываются до 100:

Входное число = 100

Количество групп = 4

Возможные выходные данные:

25, 25, 25, 25

10, 20, 30, 40

15, 35, 2, 48

Вывод должен быть только один сгенерированный список. Более ориентированным на применение примером будет , как я разделил бы вероятность 1 на несколько групп, учитывая число группы , использующие R?

4 2

4 ответа:

rmultinom может пригодиться здесь:

x <- rmultinom(n = 1, size = 100, prob = rep(1/4, 4))
x
colSums(x)

Здесь я рисую один вектор, с общим размером 100, который разбит на 4 группы.

Вы можете попробовать следовать

total <- 100
n <- 4
as.vector(table(sample(1:n, size = total, replace = T)))
## [1] 23 27 24 26

as.vector(table(sample(1:n, size = total, replace = T)))
## [1] 25 26 28 21

as.vector(table(sample(1:n, size = total, replace = T)))
## [1] 24 20 28 28

Когда речь заходит о вероятностях, я думаю, что это хорошая идея:

generate.probabilities <- function(n){
    bordersR <- c(sort(runif(n-1)), 1)
    bordersL <- c(0, bordersR[1:(n-1)])
    bordersR - bordersL
}

Он дает вам n чисел из случайного распределения, которые суммируются до 1.

Определите параметры для общности

inN <- 100 # input number
nG <- 4 # number of groups

Следуя идее storaged, что нам нужно только 3 случайных числа, чтобы разделить пространство на 4 области, но требующие целых чисел, внутренние границы можно найти следующим образом:

sort(sample(inN,nG-1, replace = TRUE))

ОП хотел, чтобы число в каждой группе, которое мы можем найти по

diff(c(0,sort(sample(inN,nG-1, replace = TRUE)), inN))