Игрушки примера:Чистого способ вычисления вероятности перехода между двумя столбцами в data.table R
library(data.table)
set.seed(1)
n_people <- 100
groups <- c("A", "B", "C")
example_table <- data.table(person_id=seq_len(n_people),
group_2010=sample(groups, n_people, TRUE),
group_2011=sample(groups, n_people, TRUE))
## Error-prone and requires lots of typing -- programmatic alternative?
transition_probs <- example_table[, list(pr_A_2011=mean(group_2011=="A"),
pr_B_2011=mean(group_2011=="B"),
pr_C_2011=mean(group_2011=="C")),
by=group_2010]
transition_probs # Essentially a transition matrix giving Pr[group_2011 | group_2010]
# group_2010 pr_A_2011 pr_B_2011 pr_C_2011
# 1: A 0.1481481 0.5185185 0.3333333
# 2: B 0.3684211 0.3947368 0.2368421
# 3: C 0.3142857 0.3142857 0.3714286
«ручной» подход выше хорошо, когда эти группы A, B, C, но получает грязно если есть больше групп (или если у нас есть только вектор groups
, но мы не знаем заранее, что он содержит).
Есть ли способ «data.table way» для вычисления объекта transition_probs в моем примере кода выше? Можно ли заменить (pr_A_2011 = ...) на что-то программное?
Я обеспокоен тем, что если я добавлю группу D, мне придется редактировать код в нескольких местах, в частности, набрав pr_D_2011=mean(group_2011=="D")
.
Спасибо - я действительно не знал о 'prop.table'! – Adrian