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

8 views (last 30 days)
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
  1 Comment
Poulomi Ganguli
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

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 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

More Answers (0)

Categories

Find more on Resizing and Reshaping 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!