在matlab中的多个列中查找多个重复值

时间:2015-06-24 13:57:47

标签: matlab statistics

我已尽力为此找到答案。

所以我有一个巨大的矩阵,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

请帮忙吗?

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,:)