How to get the average of a subset of data in a matrix?

3 views (last 30 days)
I am having some difficulty finding the average of some subsets of data. For example, given the following matrix:
ItemA 7
ItemA 8
ItemA 9
ItemB 10
ItemB 12
ItemB 14
ItemC 8
ItemC 16
ItemC 0
Given the above data, I would like to find the average of item A, B, and C individually. So it should return that Item A the average is 8, Item B the average is 12, and item C the average is 8.
The above data is just an example, the actual data is many more items so I need it to work for an unknown amount of items.
If you have any questions feel free to ask,
Thanks
  7 Comments
Aaron
Aaron on 5 Nov 2013
If the mean of the x's and the mean of the y's are the same as kmeans of one cluster then I would be able to just use accummarray right?
Aaron
Aaron on 5 Nov 2013
Also, I think kmeans tries to minimize the Euclidean distances to give a centroid with the minimal distance between all of the data points. I am open for suggestions though

Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 5 Nov 2013
C = {'ItemA' 1 3
'ItemA' 2 5
'ItemA' 3 2
'ItemB' 2 4
'ItemB' 1 3
'ItemC' 2 9
'ItemC' 9 2};
[a,ii,ii] = unique(C(:,1));
[j1,j2] = ndgrid(ii,1:2);
b = cat(1,C{:,2:3});
out = [a, accumarray([j1(:),j2(:)],b,[],@(x){mean(x)})];
  1 Comment
Aaron
Aaron on 6 Nov 2013
That worked out perfectly. Is there a way to do standard deviation in the accumarray function instead of mean? like @stddev or something similar. Thanks a lot for your answer, it was very useful.

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!