MATLAB Answers

Retain IDs of rows kept by the Unique function

1 view (last 30 days)
Alessandro on 1 Mar 2017
Edited: Alessandro on 1 Mar 2017
I have a matrix composed in the following way: [ID_1 ID_2 Resisting_Area]
ID_1 and ID_2 are integer values, Resisting_Area is float.
I need to perform the unique operation on the first 2 columns of the matrix, but also I need to carry the third column value for the kept rows. Is there a simple way to do this?
A = [1 2 3.0001; 1 2 3.0002; 2 4 5.12];
I would like to select only the first and third rows but
B = unique(A,'rows')
won't do it, since the resisting area value is not integer and it is not correctly detected as duplicate. Also uniquetol does not have a 'rows' option.


Sign in to comment.

Accepted Answer

Roger Stafford
Roger Stafford on 1 Mar 2017
Edited: Roger Stafford on 1 Mar 2017
[U,m] = unique(A(:,1:2),rows);
B = [U,m];
I'm not sure which you want to keep, the indices of the "kept" rows or those kept third column values themselves. If the latter, change the second line of code to:
B = [U,A(m,3)];
Note that the rows that are "kept" depends on the 'first' or 'last' option, though that doesn't affect the contents of U, only that of m.

  1 Comment

Alessandro on 1 Mar 2017
That's exactly what I was looking for. For some reason I didn't understand the second output argument was used to track IDs of the sorted first output, when reading the help. Plus, I do not really care which one is kept when a repetition is found. The 3rd column values only differ for floating errors. Thank you!

Sign in to comment.

More Answers (0)