Вероятностное присвоение значений столбца фрейма данных

Я пытаюсь создать фрейм данных с именем «студенты» с четырьмя переменными: пол, год (первокурсник, второкурсник, младший, старший), возраст и средний балл. Идея состоит в том, чтобы иметь фрейм данных, иллюстрирующий четыре уровня измерения: номинальный, порядковый, интервальный и относительный.

На данный момент это выглядит примерно так:

ID    Gender    Year        Age    GPA
1     Male      Sophomore   0      3.9
2     Male      Junior      0      3.3
3     Female    Junior      0      3.6
4     Male      Freshman    0      3.1
5     Female    Senior      0      2.9

У меня проблема с возрастом. Я хотел бы, чтобы возраст был назначен на основе вероятности. Например, если студент является первокурсником, я бы хотел, чтобы возраст был назначен примерно в следующих строках:

Age    Probability
14     .47
15     .48
16     .05

У меня есть функция для этого:

1: Age <- function(df) {
2:   for (i in 1:nrow(df) {
3:     if (df[i, 2] == "Freshman") {
4:       df[i, 3] = 15
5:         } else if {
6:           continue through the years
7:     }
8:    }
9:  }

Я думаю, что я хочу изменить правую часть задания в строке 4 на что-то, что будет определять возраст вероятностно. Вот и не могу понять как сделать.

В связи с этим, если есть лучший способ сделать это, чем то, что я рассматриваю, я был бы признателен, если бы это услышал.

И, наконец, я погуглил в Интернете, запросил форумы R на Reddit и Talk Stats и искал теги R на этом сайте, но все безрезультатно. Я не могу поверить, что я первый человек, который когда-либо хотел сделать что-то подобное, поэтому мне пришло в голову, что, возможно, я неправильно формулирую запрос. Если это так, любые рекомендации также будут оценены.


person rwjones    schedule 30.01.2015    source источник


Ответы (1)


Используйте функцию sample следующим образом:

sample(14:16, size=1,prob=c(0.47, 0.48, 0.05))
## [1] 14
sample(14:16, size=10,rep=TRUE,prob=c(0.47, 0.48, 0.05))
## [1] 14 14 15 14 15 16 15 15 15 15
person bartektartanus    schedule 30.01.2015