R言語で因子の組み合わせを全通り作る
Rで様々な因子の組み合わせを作るのに、意外と手こずったのでメモ。
例えば、ランチメニューで、Aセット(パスタ2種、飲み物3種)があり、それらの組み合わせを全通り作ることを考える。
A <- expand.grid(pasta=c('ミートソース','カルボナーラ'), drink=c('紅茶','コーヒー','コーラ')) > A pasta drink 1 ミートソース 紅茶 2 カルボナーラ 紅茶 3 ミートソース コーヒー 4 カルボナーラ コーヒー 5 ミートソース コーラ 6 カルボナーラ コーラ
で、今回詰まったのは、以下のような問題である。
問:二人組の客が来て、AセットとBセット(主食2種、メイン2種、飲み物三種)を1つずつ頼んだ時、全通りの注文のされ方を求めよ。
結論として、reshapeパッケージ(plyrパッケージ依存)のexpand.grid.dfを利用した。
library('reshape') A <- expand.grid(pasta=c('ミートソース','カルボナーラ'), drink=c('紅茶','コーヒー','コーラ')) B <- expand.grid(staple=c('ライス','パン'),main=c('肉','魚'), drink=c('紅茶','コーヒー','コーラ')) > B staple main drink 1 ライス 肉 紅茶 2 パン 肉 紅茶 3 ライス 魚 紅茶 4 パン 魚 紅茶 5 ライス 肉 コーヒー 6 パン 肉 コーヒー 7 ライス 魚 コーヒー 8 パン 魚 コーヒー 9 ライス 肉 コーラ 10 パン 肉 コーラ 11 ライス 魚 コーラ 12 パン 魚 コーラ C <- expand.grid.df(A,B) > C pasta drink staple main drink 1 ミートソース 紅茶 ライス 肉 紅茶 2 カルボナーラ 紅茶 ライス 肉 紅茶 3 ミートソース コーヒー ライス 肉 紅茶 4 カルボナーラ コーヒー ライス 肉 紅茶 ----中略---- 69 ミートソース コーヒー パン 魚 コーラ 70 カルボナーラ コーヒー パン 魚 コーラ 71 ミートソース コーラ パン 魚 コーラ 72 カルボナーラ コーラ パン 魚 コーラ
組み合わせは、Aセットについて、2*3、Bセットについて、2*2*3
したがって、6*12=72通りある。実際その全てが求められているので、合っているようだ。
結論:複数のひも付けされた因子の組み合わせは、expand.grid.df