Sort a matrix based on unique values

Hi,
Lets assume I have matrix M:
And I want to fill in matrix O:
I want to sort the final matrix based on the first row in matrix M and O. If I just fill in matrix O without sorting, I get this result:
This is wrong, because colum 3 should be NaN while column 4 should have the values from matrix O, because there is a "match" between the first rows (1004 and 1004).
I hope it was clear. Thanks

2 Comments

Use ismember.
If you had given data as text then I would have shown you how, but I can't do anything with data in screenshots.
Hi Stephen,
Thanks for the fast response. It is just random created data. My original data is very large (857 x 19000).
But here is the code for this example:
M = NaN(4,5);
N = [1001 1002 1003 1004 1005];
M = [N;M];
O = rand(2,3);
O2 = [1001 1002 1004];
O = [O2;O];
M(2:4,1:3) = O;

Sign in to comment.

 Accepted Answer

I think you can use the ismember function to do what you want. For example,
[tf,loc] = ismember([1001 1002 1004],[1001 1002 1003 1004 1005]);
will result in
loc = [1 2 4]
skipping the 3rd column as you want.
So, you probably want something like
[tf,loc] = ismember(O(1,:),M(1,:));
to find your indices.

3 Comments

Side comment: It's generally a bad idea to name a variable "O", because it is so easy to confuse it with a zero. Give your matrices descriptive names. It will make debugging easier.
Mak
Mak on 4 Apr 2020
Edited: Mak on 4 Apr 2020
I have tried this:
if ismember(M(1,:),O(1,:)) == true
M(2:5,1:5) = O
end
But did not work. It's not replacing
This worked. Thank you
M = NaN(4,5);
N = [1001 1002 1003 1004 1005];
M = [N;M];
A = rand(3,3);
B = [1002 1003 1005];
A = [B;A];
idx = find(ismember(M(1,:),A(1,:)))
M(2:5,idx) = A

Sign in to comment.

More Answers (0)

Categories

Asked:

Mak
on 4 Apr 2020

Commented:

Mak
on 5 Apr 2020

Community Treasure Hunt

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

Start Hunting!