# Extracting row of a matrix based on maximum value of a column element

5 views (last 30 days)
Poulomi Ganguli on 24 Aug 2018
Answered: Stephen Cobeldick on 24 Aug 2018
Hello all:
I have a matrix as below. I want to build a new matrix based on maximum value at row 4 element. Here column 5 is the index matrix, column 1 is the year, column 2 is month and column 3 is date. I want to extract the row with maximum value in column 4. For example, the value with 2 in column 5 occurred twice. The respective values at column 4 are 50 and 100. I want to extract the row with value 100.
A=
1978 7 1 45 1
1978 7 11 50 2
1978 7 14 100 2
1978 7 23 120 3
1978 8 17 150 4
1978 8 23 130 5
1978 8 24 40 5
1978 8 25 200 5
Desired output B =
1978 7 1 45 1
1978 7 14 100 2
1978 7 23 120 3
1978 8 17 150 4
1978 8 25 200 5
Poulomi Ganguli on 24 Aug 2018
Hello, I solved the problem using ismember
unq_col = unique(Data_All(:,5));
for jdx = 1:size(unq_col,1)
matched = ismember(Data_All(:,5),unq_col(jdx,1),'rows');
des_flow = Data_All(matched,:);
[Maxflow,ID] = max(des_flow(:,4));
OUT(jdx,:) = des_flow(ID,:);
end

Stephen Cobeldick on 24 Aug 2018
>> mat = [...
1978 7 1 45 1
1978 7 11 50 2
1978 7 14 100 2
1978 7 23 120 3
1978 8 17 150 4
1978 8 23 130 5
1978 8 24 40 5
1978 8 25 200 5]
>> tmp = sortrows(mat,[5,4]);
>> idx = [diff(tmp(:,5))>0;true];
>> out = tmp(idx,:)
out =
1978 7 1 45 1
1978 7 14 100 2
1978 7 23 120 3
1978 8 17 150 4
1978 8 25 200 5