簡體   English   中英

基於另一列的一列中的值計數

[英]Count of values in one column based on another column

我有一個包含兩列的表格,如下所示:

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

我如何(在 Matlab 或 Octave 中)計算不同值的數量——即第一列中每個值的第二列中唯一值的數量——並顯示以下內容?

1 1
2 2
3 1 

您可以通過幾個步驟做到這一點

  1. 查找所有唯一行,即兩列的唯一組合。 unique function 有一個選項可以做到這一點

    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得到想要的 output

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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM