我有两列列表。第一列是主题编号,第二列是会话编号(即当主题第二次进入时,会话编号为2,每次访问都是如此)。
SubMasterList = [6004 1; 6004 2; 6008 1; 6008 2; 6010 1; 6012 1; 6012 2; 6012 3]
我希望SubMasterList
只包含会话编号最大的主题的一行(第2列)。似乎是:
SubMasterList = [6004 2; 6008 2; 6010 1; 6012 3]
答案 0 :(得分:6)
SubMasterList = [6004 1; 6004 2; 6008 1; 6008 2; 6010 1; 6012 1; 6012 2; 6012 3];
tmp = sortrows(SubMasterList,-2); %sort, with descending order to ensure the highest number is on top
[~,idx,~]=unique(tmp(:,1)); %extract indices
Result = tmp(idx,:) %index the sorted array to obtain the result
Result =
6004 2
6008 2
6010 1
6012 3
答案 1 :(得分:4)
你想要的几乎是accumarray
的定义:-)只需使用unique
根据矩阵的第一列获取标签,并将其作为第一个输入传递给accumarray
:
[x, ~, u] = unique(SubMasterList(:,1));
y = accumarray(u, SubMasterList(:,2), [], @max);
result = [x y];
答案 2 :(得分:2)
@Adriaan的回答可能效率不高:
A = [6004 1; 6004 2; 6008 1; 6008 2; 6010 1; 6012 1; 6012 2; 6012 3];
[C,~,ic] = unique(A(:,1));
B = A(:,2);
for ii=1:max(ic)
D(ii,1) = max(B(ic==ii));
end
SubMasterList = [C D];
SubMasterList =
6004 2
6008 2
6010 1
6012 3