How can I sort a matrix to match another matrix?
    8 views (last 30 days)
  
       Show older comments
    
  Hello everybody,
I have a question regarding the sorting. I have 2 matrices, A and B. For example:
A = [11 1; 12 1; 13 1; 21 2; 23 2; 31 3; 33 3; 41 4]
B = [1; 2; 1; 3; 1; 4; 2; 3]
How can I sort A (randomly each time) that the 2 column of A is same with B? Such as:
A = [12 1; 23 2; 11 1; 31 3; 13 1; 41 4; 21 2; 33 3]
Stay happy and healty.. 
0 Comments
Accepted Answer
  Stephen23
      
      
 on 16 Sep 2020
        >> [~,idx] = sort(B);
>> [~,idx(idx)] = sort(A(:,2));
>> A = A(idx,:)
A =
   11    1
   21    2
   12    1
   31    3
   13    1
   41    4
   23    2
   33    3
6 Comments
  Stephen23
      
      
 on 17 Oct 2020
				
      Edited: Stephen23
      
      
 on 17 Oct 2020
  
			"Do you have any idea that I can make this work?"
Possibly you could replace the RHS with a string (or character vector) of the number:
A(:,2) == num2str(k)
"...the first column contains strings, whereas second column is numbers."
I strongly recommend that you convert the data into a table, then the first column would be strings and the second column really would be numbers (not strings encoding numbers). Numeric data should be efficiently stored as numeric, which also makes processing it much easier.
More Answers (0)
See Also
Categories
				Find more on Shifting and Sorting Matrices in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
