matlabでテーブルの小計を取りたいです。2 つの列の値が等しい場合は、その値を取得し、エントリがあれば加算します。
例を挙げると、ソースマトリックスは次のとおりです。
A = [1 2 3;
1 2 2;
1 4 1;
2 2 1;
2 2 3];
出力は次のようになります。
B = [1 2 5;
1 4 1;
2 2 4];
最初の 2 列が等しい場合は、3 列目を合計します。数回ループすることなく、簡単に行う方法はありますか?
unique
との組み合わせでこれを行うことができますaccumarray
:
%# find unique rows and their corresponding indices in A
[uniqueRows,~,rowIdx]=unique(A(:,1:2),'rows');
%# for each group of unique rows, sum the values of the third column of A
subtotal = accumarray(rowIdx,A(:,3),[],@sum);
B = [uniqueRows,subtotal];