Как разбить число случайным образом на несколько чисел, учитывая число и n групп?
Например, если число равно 100, а число групп равно 4, он должен дать любой случайный список из 4 чисел, которые складываются до 100:
Входное число = 100
Количество групп = 4
Возможные выходные данные:
25, 25, 25, 25
10, 20, 30, 40
15, 35, 2, 48
Вывод должен быть только один сгенерированный список. Более ориентированным на применение примером будет , как я разделил бы вероятность 1 на несколько групп, учитывая число группы , использующие R?
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))