組み合わせ関連スクリプト
組み合わせ関連スクリプト
2つの実験で得た以下(質問の一番下)のようなデータがあります。カラム1は被験者(subject)番号 (1-42)、カラム2は実験1(expt1)で各被験者が属したグループ (1-9)、カラム2は実験2(expt2)で各被験者が属したグループ (1-9)。各実験とも、4人属しているグループと5人属しているグループがあるのですが、両実験の各グループに同じ人数ずつ(4人でも3人でも2人でも1人でもいい)必要なので、何人かのデータを破棄したく、どの被験者のデータを破棄すれば(もしくはどれを残せば)両実験で各グループの被験者数が同一になるか調べたいのです。(もしかしたら以下のデータではそのようなデータ編成は不可能なのかもしれません...)すべての組み合わせを試すと膨大な数になってしまうので、要領よく調べられるようなスクリプトを書こうとしているのですが、どこから始めたらいいのか見当つかずです。(役に立つかわかりませんが)とりあえずブロックごとに組み合わせを生成する、Python のitertoolsを使ったコードを以下のサイトで見つけました:
http://code.activestate.com/recipes/501151-generating-combinations-in-blocks/
汎用性の乏しい質問で(しかも例を簡単にまとめられず)恐縮ですが、何か案がありましたらご教示いただければ幸いです。
シェルスクリプト、awk、それとPython(ちょこっと)が使えます。
データ(フィールドセパレータはカンマ):
subject,expt1,expt2
1,1,1
2,1,1
3,1,2
4,1,7
5,1,9
6,2,2
7,2,2
8,2,3
9,2,3
10,2,3
11,3,3
12,3,3
13,3,4
14,3,4
15,3,8
16,4,4
17,4,4
18,4,5
19,4,5
20,4,7
21,5,5
22,5,5
23,5,6
24,5,6
25,6,6
26,6,6
27,6,7
28,6,7
29,7,4
30,7,5
31,7,8
32,7,8
33,7,8
34,8,2
35,8,8
36,8,9
37,8,9
38,8,9
39,9,1
40,9,1
41,9,6
42,9,9