質問: 複数の変数の値の組み合わせをカウントし、度数表にまとめる方法 d個の二値変数xi( 下の例ではd=3) があって、それぞれランダムに値を取った生データ(左下の表に図示)が与えられた時、その値の組み合わせ({0,0,...,0}から{1,1,...1}のものまで)2^d通りの、サンプル数をカウントして、それを1×2^dのベクトルnとして格納したいのですが、方法が分かりません。 具体的な例を以下の図で示します。ここでは、左の元データの中で{x1,x2,x3}の組み合わせが{0,0,0}のものが1個、{0,0,1}のものが2個、というように数えて右の表のようにまとめるという操作をしたいと考えています。
回答: こちらでどうぞ! % ユニークな要素 items = [1,1,1; 1,1,0; 1,0,1; 0,1,1; 0,0,1; 0,1,0; 1,0,0; 0,0,0]; % ユニークな要素を適当に繰り返してサンプルデータ作成 % data: 50x3の配列 idx = randi(8,50,1); data = items(idx,:); % まず unique を行単位で適用 [udata,~,index] = unique(data,'rows'); % index は udata の各行が data の何行目に存在したかを示す配列 udata %% 手法1:forループで datacount1 = zeros(length(udata),1); for ii=1:length(udata) datacount1(ii) = sum(index==ii); end % 並べると見やすい? [udata,datacount1] %% accumarray で datacount2 = accumarray(index,1); % 並べると見やすい? [udata,datacount2]