Combining data with matching elements in the first two columns
    3 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Muneer
 el 18 de Feb. de 2014
  
    
    
    
    
    Comentada: Azzi Abdelmalek
      
      
 el 19 de Feb. de 2014
            Hello, I have a data table that looks like this
920  381  784  0
920  381  0  21.4375
23  388  1703  0
23  388  0  4.109375
445  487  304  0
445  487  0  15.09375
1100  506  1480  0
1100  506  0  28.234375
245  520  454  0
245  520  0  40.21875
For all the entries where the first two columns match (ie, the first two rows), I would like to combine those two rows into one. So these two rows:
920  381  784  0
920  381  0  21.4375
Will become
920  381  784  21.4375
And so on for the rest of the data set. I would appreciate any help.
Thanks
2 comentarios
  the cyclist
      
      
 el 18 de Feb. de 2014
				Is that exact pattern guaranteed? Namely, will the first zero always be in column 4, and the second zero always be in column 3? And will there always be a pair of rows like that?
Respuesta aceptada
  the cyclist
      
      
 el 18 de Feb. de 2014
        
      Editada: the cyclist
      
      
 el 19 de Feb. de 2014
  
      Here's one way:
[~,i,j]=unique(M(:,1:2),'rows');
[M(i,[1 2]),accumarray(j,M(:,3)),accumarray(j,M(:,4))]
where M is your original array.
EDIT: Original solution only gave the last two columns, so I fixed it to give all the columns you need.
3 comentarios
  Azzi Abdelmalek
      
      
 el 19 de Feb. de 2014
				The cyclist, your code doesn't work if there are more then two duplicate rows (I mean duplicate for the two first column).
Más respuestas (1)
  Azzi Abdelmalek
      
      
 el 18 de Feb. de 2014
        
      Editada: Azzi Abdelmalek
      
      
 el 18 de Feb. de 2014
  
      M=[920  381  784  0
  920  381  0  21.4375
  23  388  1703  0
  23  388  0  4.109375
  445  487  304  0
  445  487  0  15.09375
  1100  506  1480  0
  1100  506  0  28.234375
  245  520  454  0
  245  520  0  40.21875]
[~,idx,jj]=unique(M(:,1:2),'rows','stable'); % M is your matrix
n=numel(idx)
out=zeros(n,size(M,2))
for k=1:n
  out(k,:)=max(M(find(jj==k),:))
end
4 comentarios
Ver también
Categorías
				Más información sobre Logical en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!