フィルターのクリア

Combining data with matching elements in the first two columns

2 ビュー (過去 30 日間)
Muneer
Muneer 2014 年 2 月 18 日
コメント済み: Azzi Abdelmalek 2014 年 2 月 19 日
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 月 18 日
This does not give the result
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 件のコメント
Azzi Abdelmalek
Azzi Abdelmalek 2014 年 2 月 18 日
Look at edited answer
Muneer
Muneer 2014 年 2 月 18 日
Thanks for the help!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by