在matlab中的多列中查找多个重复值
我已经尽了最大的努力来寻找答案 我有一个巨大的矩阵,a列是ID。B列和C列是某些值/分数 大概是这样的:在matlab中的多列中查找多个重复值,matlab,statistics,Matlab,Statistics,我已经尽了最大的努力来寻找答案 我有一个巨大的矩阵,a列是ID。B列和C列是某些值/分数 大概是这样的: A B C 876 0 1 159 2 3 887 0 1 876 1 2 597 1 3 159 2 3 所需: 我希望matlab自动检测A列中是否再次出现id。如果是,它应该查找B列和C列中的值,并查看它们是否匹配。如果有,输出应该告诉id、B列和C列中的2个值以及计数(事件) 上述示例的输出应为: A B C Count 159 2
A B C
876 0 1
159 2 3
887 0 1
876 1 2
597 1 3
159 2 3
所需:
我希望matlab自动检测A列中是否再次出现id。如果是,它应该查找B列和C列中的值,并查看它们是否匹配。如果有,输出应该告诉id、B列和C列中的2个值以及计数(事件)
上述示例的输出应为:
A B C Count
159 2 3 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
使用accumarray的替代方法(我添加了测试数据) 要根据第4列对输出进行排序,请使用
排序
和下降
选项,如下所示:
[~,Idx] = sort(Out(:,4),'descend')
Out = Out(Idx,:)
哎呀,矩阵不清楚。Mods可以有人编辑的例子和输出显示矩阵吗?谢谢!杰出的没问题,很乐意帮忙
accumarray
非常强大,哈哈!是否需要重新排列矩阵以首先显示较高的计数??请看我上面的评论1是什么?这是对其他内容的排序,而不是最后一列/计数。回答不错!我最初也想到了accumarray
,但后来选择了histc
Ok,还有一个问题让我的生活更轻松:如何重新排序结果以显示更高的计数。例如,如果159的计数为3,则它将在矩阵中列出高于876的值,即2?谢谢!要首先使用较高的计数进行排序:由于计数是第4行,请使用sortrows(result,-4)
(-
表示降序)
[~,Idx] = sort(Out(:,4),'descend')
Out = Out(Idx,:)