R имеет множество функций для моделирования случайных событий. В этом конкретном случае я думаю, что полиномиальный случайный вектор может быть полезен.
Вот пример. Мы говорим, что мы хотим взять 10 человек, и есть 4 класса этих людей с различными вероятностями:
inds <- rmultinom(10, 1, sectoral_data$share)
inds
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 0 0 0 1 0 0 1
[2,] 0 0 0 0 1 0 0 0 1 0
[3,] 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 1 0 1 0 1 0 0
Результат - это матрица, где в каждом столбце указано, какой человек был выбран. Чтобы превратить это в фактические индексы (от 1 до 4), мы вызываем which.max()
для каждого столбца:
inds <- apply(inds, 2, which.max)
inds
[1] 1 1 1 4 2 4 1 4 2 1
Теперь мы можем использовать этот вектор для выбора лиц из исходных данных:
data.frame(individual=1:10, sectoral_data[inds, c("sector", "avg_wage")])
individual sector avg_wage
1 1 a 400
1.1 2 a 400
1.2 3 a 400
4 4 d 1000
2 5 b 600
4.1 6 d 1000
1.3 7 a 400
4.2 8 d 1000
2.1 9 b 600
1.4 10 a 400
Это один из способов сделать это, но кажется довольно простым и прямым.