Contingency Matrix(Table)を使っていて、一時的にListへ変換したいことがあります。
このContingecy Matrixから
cmat =
id | A | B | C |
---|---|---|---|
1 | F | T | F |
2 | F | T | F |
3 | F | F | T |
3 | F | F | F |
または
id | A | B | C |
---|---|---|---|
1 | 0.1 | 0.6 | 0.3 |
2 | 0.1 | 0.7 | 0.1 |
3 | 0.1 | 0.1 | 0.4 |
4 | 0 | 0 | 0 |
こういうリストへ
clist =
key | value |
---|---|
1 | B |
2 | B |
3 | C |
4 | A |
一解法
reshapeやtidyrを使ってやるのが基本のようですが、論理値だけでなく、値のうち最大のものという条件などを考えると、以下のような感じにしてみました。
clist <- cmat %>% tidyr::gather(key, value, - id) %>%
group_by(id) %>%
top_n(n = 1) %>%
slice(1) %>%
arrange(id)
確率で選択したい場合など、最大のもの(TRUE)が複数ある場合や、全部0(FALSE)の場合にも対応したいので、無理やりですが、これでもいいかもしれません。
うーん、違うな。