Combining data with matching elements in the first two columns

2 次查看(过去 30 天)
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 个评论
the cyclist
the cyclist 2014-2-18
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?
Muneer
Muneer 2014-2-18
No it isn't guaranteed that there will always be a pair of rows. If there is one row with no matching row, however, it will have a value in column three, not column four. Thanks

请先登录,再进行评论。

采纳的回答

the cyclist
the cyclist 2014-2-18
编辑:the cyclist 2014-2-19
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 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2014-2-19
The cyclist, your code doesn't work if there are more then two duplicate rows (I mean duplicate for the two first column).

请先登录,再进行评论。

更多回答(1 个)

Azzi Abdelmalek
Azzi Abdelmalek 2014-2-18
编辑:Azzi Abdelmalek 2014-2-18
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 个评论

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by