# Grouping rows on the first column and obtain minimum value on second column

1 ビュー (過去 30 日間)
H_W 2022 年 8 月 3 日

I have the following matrix A and would like to group it on the first column
A = [13 7
13 6
13 5
13 6
12 7
12 5];
and then obtain minimum value on second column to obtain matrix B
B = [13 5
12 5];
Could anyone give a hint?
Thanks!

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

### 回答 (2 件)

Torsten 2022 年 8 月 3 日

What do you mean by "group on the first column" ?
A = [13 7
13 6
13 5
13 6
12 7
12 5];
A = sortrows(A,2,'ascend');
B = A(1:nnz(A(:,2)==A(1,2)),:)
B = 2×2
13 5 12 5
##### 5 件のコメント表示非表示 4 件の古いコメント
Adam Danz 2022 年 8 月 3 日

If I'm understanding correctly, that's what the solutions do in my answer.

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

Adam Danz 2022 年 8 月 3 日

A = [13 7
13 6
13 5
13 6
12 7
12 5];
B = groupsummary(A,A(:,1),'min')
B = 2×2
12 5 13 5
Note that rows are sorted according to the grouping column values.
To keep the row order stable there are several options but I lean on arrayfun which is less readable than other options.
B = cell2mat(arrayfun(@(g){min(A(A(:,1)==g,:))}, unique(A(:,1),'stable')))
B = 2×2
13 5 12 5

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

### カテゴリ

Find more on Shifting and Sorting Matrices in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by