Simpler code for aggregating data by sum
조회 수: 1 (최근 30일)
이전 댓글 표시
Hello,
given matrix A: A=[4 0.5;4 0.25;1 0.125; 2 0.2;4 0.6;3 0.2; 1 2/3; 2 1; 2 1/16;4 0.5]
asked: Aggregate data in first column by sum
desired result:
1.0000 0.7917
2.0000 1.2625
3.0000 0.2000
4.0000 1.8500
I composed a code, but it work half, it can not make the data unique. So it fails at : G=unique(List)
Can somebody tell me why it fails at that point? And is there a more straight forward code for this whole proces? Maybe inbuilt functions? Can I get some feedback pls?
This is my code:
List=[];
% Make list unique
for i=1:size(A,1)
F=A(A(:,1)==A(i,1),:); %subsetting all rows
ElementList=[A(i,1) sum(F(:,2))]; %adding the sum of the subset to a row
List=[List; ElementList] % saving row plus its aggregated sum to a list
end
G=unique(List) %making the list unique
kind regards,
댓글 수: 3
Akira Agata
2019년 1월 10일
Or simply:
A = [4 0.5;4 0.25;1 0.125; 2 0.2;4 0.6;3 0.2; 1 2/3; 2 1; 2 1/16;4 0.5];
B = splitapply(@sum,A(:,2),A(:,1));
The result is:
>>[unique(A(:,1)), B]
ans =
1.0000 0.7917
2.0000 1.2625
3.0000 0.2000
4.0000 1.8500
채택된 답변
OCDER
2019년 1월 10일
A=[4 0.5;4 0.25;1 0.125; 2 0.2;4 0.6;3 0.2; 1 2/3; 2 1; 2 1/16;4 0.5]
Results = [unique(A(:, 1)), accumarray(A(:, 1), A(:, 2))];
Results =
1.0000 0.7917
2.0000 1.2625
3.0000 0.2000
4.0000 1.8500
댓글 수: 4
OCDER
2019년 1월 11일
Check your results, as you have [3 4 2] unique combo.
A=[2.0000 3.0000 4.0000 0.01;
2.0000 3.0000 4.0000 0.05;
3.0000 2.0000 4.0000 0.01;
3.0000 4.0000 2.0000 0.02;
1.0000 2.0000 3.0000 0.03;
2.0000 3.0000 4.0000 0.00;
1.0000 2.0000 3.0000 0.02;
2.0000 3.0000 4.0000 0.01;
2.0000 3.0000 4.0000 0.01;
3.0000 2.0000 4.0000 0.07];
[UnqVal, ~, UnqGrpNum] = unique(A(:, 1:3), 'rows');
E = [UnqVal, accumarray(UnqGrpNum, A(:, end))];
E =
1.0000 2.0000 3.0000 0.0500
2.0000 3.0000 4.0000 0.0800
3.0000 2.0000 4.0000 0.0800
3.0000 4.0000 2.0000 0.0200
추가 답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!