我已尽力为此找到答案。
所以我有一个巨大的矩阵,A列是ids。列B和C是特定值/分数。
这样的事情:
A B C
876 0 1
159 2 3
887 0 1
876 1 2
597 1 3
159 2 3
必需: 我希望matlab能够自动检测id是否在A列中再次出现。如果是,它应该查找B列和C列中的值,看看它们是否匹配。如果是这样,输出应该告诉id,列B和C中的2个值以及计数(事件)。
以上示例的输出应为:
A B C Count
159 2 3 2
请帮忙吗?
答案 0 :(得分:2)
试试这个。我修改了第一行以提供更好的示例:
data = [ 876 1 2
159 2 3
887 0 1
876 1 2
597 1 3
159 2 3 ];
[~, t, u] = unique(data, 'rows');
c = histc(u, 1:max(u));
ind = c>1;
result = [data(t(ind),:) c(ind)];
结果:
result =
159 2 3 2
876 1 2 2
答案 1 :(得分:1)
使用accumarray
替代:(我添加了测试数据)。
clear
clc
close all
D = [876 0 1; 159 2 3; 887 0 1 ;876 1 2 ;597 1 3 ;159 2 3;876 0 1; 876 0 1];
%// Find unique rows and their indices
[x,~,z] = unique(D,'rows');
n=accumarray(z,1);
rowstokeep = find(n>1);
Out = [x(rowstokeep,:) n(rowstokeep,:)]
Out =
159 2 3 2
876 0 1 3
要根据第4列对输出进行排序,请使用sort
选项descend
,如下所示:
[~,Idx] = sort(Out(:,4),'descend')
Out = Out(Idx,:)