How to filter duplicate entries
    4 次查看(过去 30 天)
  
       显示 更早的评论
    
Hi,
I have below entries (cell array matrix),
FirstEntry  SecondEntry Index Score
A               B        5     25
C               D        62    8  
C               K        31    2
B               A        6     25
K               C        9     2
The entry A & B (in row 1)is same as B & A(in row 4) (without consider its first entry or second entry), I only want to keep one entry for this kind of entries. Likewise, row 3 (c & K) is same as row 5 (K & C)
My desired output:
FirstEntry  SecondEntry Index Score
A               B        5     25
C               D        62    8  
C               K        31    2
Kindly some one help, many thanks in advance,
0 个评论
采纳的回答
  Adam Danz
    
      
 2018-8-8
        
      编辑:Adam Danz
    
      
 2018-8-8
  
      Your original cell array is named 't'.
t = {
'A'              'B'        5     25
'C'               'D'        62    8  
'C'               'K'        31    2
'B'               'A'        6     25
'K'               'C'        9     2};
'unqIdx' is an index of row numbers of 't' that are unique.
'desired' is your unique array without duplicates.
[~, unqIdx] = unique(cellfun(@strcat, sort(t(:,[1,2])')'), 'rows'); 
desired = t(unqIdx, :);
5 个评论
  Adam Danz
    
      
 2018-8-9
				I see. Here's the updated code that works with the old and new dataset. I could no longer do it in 1 line of code. The new version uses 2 lines and the use of cellfun() is no longer necessary. I also added the 'stable' parameter to unique() so that your final unique array is in the same order as your input array.
tSort = sort(t(:,[1,2])')';
[~, unqIdx] = unique(strcat(tSort(:,1), tSort(:,2)), 'rows', 'stable')
t(unqIdx, :)
更多回答(0 个)
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

