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)の場合にも対応したいので、無理やりですが、これでもいいかもしれません。

うーん、違うな。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.