# To arrange matrix based off criteria in column

2 views (last 30 days)
Charms on 4 Dec 2019
Commented: Star Strider on 4 Dec 2019
Hi i have a 60x2 matrix, with the first column being a number from 1 to 300 (not consecutive), and the second column with locations from 1 to 9. I have attached a picture to show how it looks like and would like to regroup into a new matrix (AB) of 9x____, the rows being the locations (1:9), and the columns being the numbers that have the respective locations i.e. in the first column, if numbers 8, 16 & 52 have a corresponding location 1 in column 2, AB row 1 will be 8,16,52 (1 in each column, total 3 columns). What functions should I use for this/any ideas how to write for this?
Thank you! :)

Star Strider on 4 Dec 2019
Try this:
Col1 = randperm(300); % Create Column 1
Col2 = randi(9, 1, 300); % Create Column 2
M = [Col1(:) Col2(:)]; % Create Matrix
Gather = accumarray(M(:,2), M(:,1), [], @(x){x.'}); % Cell Array With Desired Information
AB = {(1:9).', Gather};
That should work. You will need to keep ‘AB’ as a cell array because there are different numbers of columns in each row. You might be able to use a structure to store this information, however I doubt that a table would work correctly.
Experiment to get the result you want.

Charms on 4 Dec 2019
Thanks star strider! Played around with it and got it :)
Star Strider on 4 Dec 2019
As always, my pleasure!
To get the individual rows of ‘AB’:
Row1 = [AB{1}(1) AB{2}{1}]
Row2 = [AB{1}(2) AB{2}{2}]
and so for the rest.