Combining data with matching elements in the first two columns
1 回表示 (過去 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
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?
採用された回答
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
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
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 Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!