How to remove repeating pair

Hi,
I have the below table,(my 3rd column is just a Rsquare value)
A B 1
N M 1
Y L 1
B A 1
K U 1
L Y 1
A B 1
U K 1
P G 1
M N 1
X Z 1
U K 1
I only want to keep one combination out of the below: in row 1, row4, row7 (in my definition, A-->B is same B--> A, and also remove repeating pair like row1 and row3 is just a duplicate).Filtering is just based on column1 & column2.
A B 1
B A 1
A B 1
From above only keep
A B 1
and finally my output should be as below:
A B 1
N M 1
Y L 1
K U 1
P G 1
X Z 1
Many thanks in advance,

 采纳的回答

without 'stable'
A={'HT0MEK1' 'H0MEK1'
'HT0MEK2' '78 T0MEK2'
'JT0KEL3' 'JKEL3_ul'
'JT0KEL4' '12 0KEL4_45'
'T0KEL5' 'P0KEL5_89K_45um'
'J0KEL6' 'KEL6_Y_9Et4_y'
'BK0JIL7' 'LG_JIL7'
'HA0GEK8' 'K0GEK8'
'H0GEK9' 'H0GEK9'
'HT0MEK1' 'H0MEK1'
'HT0MEK2' '78 T0MEK2'
'JKEL3_ul' 'JT0KEL3'
'12 0KEL4_45' 'JT0KEL4'
'KEL6_Y_9Et4_y' 'J0KEL6'
'12 0KEL4_45' 'JT0KEL4'
'P0KEL5_89K_45um' 'T0KEL5'
'KEL6_Y_9Et4_y' 'J0KEL6'};
a1 = sort(A')';
[~,b0,c0] = unique(a1,'first');
[~,ii] = sort(b0);
[~,i2] = sort(ii);
c = reshape(i2(c0),size(A));
[~,b] = unique(c,'first','rows');
[~,ii] = sort(b);
[~,i2] = sort(ii);
b1 = b(ii);
out = a1(b1,:);

更多回答(2 个)

A={'A' 'B' 1
'N' 'M' 1
'Y' 'L' 1
'B' 'A' 1
'K' 'U' 1
'L' 'Y' 1
'A' 'B' 1
'U' 'K' 1
'P' 'G' 1
'M' 'N' 1
'X' 'Z' 1
'U' 'K' 1}
b=arrayfun(@(x) sort(strjoin(A(x,1:2),'')),(1:size(A,1))','un',0)
[~,ii]=unique(b,'stable')
out=A(ii,:)
Result
out =
'A' 'B' [1]
'N' 'M' [1]
'Y' 'L' [1]
'K' 'U' [1]
'P' 'G' [1]
'X' 'Z' [1]

5 个评论

Sir, It gives me below error:
??? Undefined function or method 'strjoin' for input arguments of type 'cell'.
Error in ==> @(x)sort(strjoin(A(x,1:2),''))
You're using a version older than 2013a, where strjoin was introduced. It's always a good idea to mention it your question if you're using a very old version.
In this case,
b=arrayfun(@(x) sort([A{x, [1 2]}]),(1:size(A,1))','un',0)
will work just as well.
It works, but give another error.
??? Error using ==> cell.unique at 29
Unrecognized option.
However, When I remove stable, it gives me the following output in which the order is not maintained.
Guillaume
Guillaume 2016-7-20
编辑:Guillaume 2016-7-20
As I said, it's always a good idea to mention the version of matlab you're using if it's not current.
How old is your version of matlab, if the 'stable' option of unique is not supported? Indeed, the purpose of 'stable' is to preserve the order in which the elements first appear. Since your version does not support that option, you'll have to go with the default, sorted output. The order of your output should not matter anyway.
If it does matter to you, you will either have to upgrade to a newer version of matlab or write your own stable sort.
Sir, I upgrade, stable is working, but if I use my input cell array as below:
A={'HT0MEK1' 'H0MEK1'
'HT0MEK2' '78 T0MEK2'
'JT0KEL3' 'JKEL3_ul'
'JT0KEL4' '12 0KEL4_45'
'T0KEL5' 'P0KEL5_89K_45um'
'J0KEL6' 'KEL6_Y_9Et4_y'
'BK0JIL7' 'LG_JIL7'
'HA0GEK8' 'K0GEK8'
'H0GEK9' 'H0GEK9'
'HT0MEK1' 'H0MEK1'
'HT0MEK2' '78 T0MEK2'
'JKEL3_ul' 'JT0KEL3'
'12 0KEL4_45' 'JT0KEL4'
'KEL6_Y_9Et4_y' 'J0KEL6'
'12 0KEL4_45' 'JT0KEL4'
'P0KEL5_89K_45um' 'T0KEL5'
'KEL6_Y_9Et4_y' 'J0KEL6'}
b=arrayfun(@(x) sort([A{x, [1 2]}]),(1:size(A,1))','un',0);
Then I get my b As:
b =
'0011EEHHKKMMT'
' 002278EEHKKMMTT'
'033EEJJKKLLT_lu'
' 00124445EEJKKLLT_'
'00455589EEKKKLLPT__mu'
'04669EEEJKKLLY___ty'
'077BGIIJJKLLL_'
'0088AEEGGHKKK'
'0099EEGGHHKK'
'0011EEHHKKMMT'
' 002278EEHKKMMTT'
'033EEJJKKLLT_lu'
' 00124445EEJKKLLT_'
'04669EEEJKKLLY___ty'
' 00124445EEJKKLLT_'
'00455589EEKKKLLPT__mu'
'04669EEEJKKLLY___ty'
How to get correct array;

请先登录,再进行评论。

Bhagyesh Shiyani
Bhagyesh Shiyani 2020-4-28

0 个投票

how to do it for numbers. same like strings

类别

帮助中心File Exchange 中查找有关 Characters and Strings 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by