分からんこと多すぎ

何故か就職できたので技術磨く。一人前の多重線形代数使いを目指しつつ、機械学習、データマイニングをやる

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