[英]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
您可以通過幾個步驟做到這一點
查找所有唯一行,即兩列的唯一組合。 unique
function 有一個選項可以做到這一點
c = unique( a, 'rows' );
在第 1 列中找到唯一值,這些是您輸出的第一列
u = unique( c(:,1) );
循環遍歷u
中的唯一值,並檢查在c
的第 1 列中有多少行匹配(即有多少唯一組合使用輸入a
中的第一個值)。 您可以使用arrayfun
以一種簡潔的方式執行此操作,或者一個簡單的循環將起作用
n = arrayfun( @(x) nnz(x==c(:,1)), u );
現在你可以通過結合u
和n
得到想要的 output
out = [u, n];
這為您的示例提供了所需的結果
這是一種使用unique
和accumarray
的方法:
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.