一列中基于另一列的值的计数



我有一个包含两列的表,如下所示:

1  10 
1  10 
2  30 
2  45 
3  8 
3  8 
....

我(在Matlab或Octave中(如何计算不同值的数量——也就是说,第一列中每个值在第二列中的唯一值数量——并显示以下内容?

1 1
2 2
3 1 

只需几个步骤即可完成

  1. 查找所有唯一的行,即两列的唯一组合。unique功能可选择执行此

    c = unique( a, 'rows' );
    
  2. 在第1列中查找唯一值,这些是输出的第一列

    u = unique( c(:,1) );
    
  3. 循环u中的唯一值,并检查c的第1列中有多少行匹配(即,有多少唯一组合使用输入a中的第一个值(。您可以使用arrayfun以浓缩的方式完成此操作,或者一个简单的循环将工作于

    n = arrayfun( @(x) nnz(x==c(:,1)), u );
    

现在您可以通过组合un来获得所需的输出

out = [u, n]; 

这为您的示例提供了所需的结果

以下是使用uniqueaccumarray的方法:

x = [1 10; 1 10; 2 30; 2 45; 3 8; 3 8];
[u, ~, w] = unique(x(:,1));
n = accumarray(w, x(:,2), [], @(t) numel(unique(t)));
result = [u n];

相关内容

  • 没有找到相关文章

最新更新