Simpler code for aggregating data by sum

13 views (last 30 days)
Clarisha Nijman
Clarisha Nijman on 10 Jan 2019
Commented: Clarisha Nijman on 12 Jan 2019
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 Comments
Clarisha Nijman
Clarisha Nijman on 11 Jan 2019
Thank you dear friends!!! Suggestion woks perfect!

Sign in to comment.

Accepted Answer

OCDER
OCDER on 10 Jan 2019
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 Comments
Clarisha Nijman
Clarisha Nijman on 12 Jan 2019
Ok I see, you have to assign the unique groups a number, such that you can refer to them in the accumarray function. If would never come up with such a good idea. I worked with for loops and the code runs very very long. I indeed missed the unique combo[3 4 2] in my results.
Thanks a lot!!!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by