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

5 次查看(过去 30 天)
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 个评论
Poulomi Ganguli
Poulomi Ganguli 2018-8-24
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

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2018-8-24
>> 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

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by