2012-02-10 10 views
2

でセル配列に異なる値の出現を探す:私は2つの列(「日付」と「ユーザー」)のデータファイル持っているMatlabの

date1 user1 
date1 user1 
date1 user2 
date2 user1 
date2 user2 
... 

を私は何回、それぞれ独自のユーザー見つける必要があります特定の措置を行った日付。私はユニークな()関数を使用して全体の別個のユーザーを見つけることができ、すべての行を通してforループを実行した後、等しいかどうかを確認して合計しますが、問題は8mln以上の行を持ち、それはあまりにも高価でしょう。

各ユーザーの日付の出現をカウントする他の方法はありますか?

+0

のために必要です理解してください - あなたは "行動"によって何を意味しますか?あなたのコードにはアクションの参照はありません。アレイ内のエントリが「アクション」ですか? – siliconwafer

答えて

2

あなたが扱っているデータ型は、常にexampleでよりよく記述してください。

ユーザーと日付の両方がセル配列に結合された文字列であると仮定します。

tbl = { 'date1' 'user1' 
     'date1' 'user1' 
     'date1' 'user2' 
     'date2' 'user1' 
     'date2' 'user2' }; 

1に2列を組み合わせる:

user_date = strcat(tbl(:,2),'@',tbl(:,1)); 

次にあなたが出現箇所を数えることができます。

[gi,g] = grp2idx(user_date); 
n = histc(gi,1:numel(g)); 

g = 

'[email protected]' 
'[email protected]' 
'[email protected]' 
'[email protected]' 

n = 

    2 
    1 
    1 
    1 

注意MATLAB Statistics Toolboxには、この質問はすることは容易ではないgrp2idx

+0

ありがとう!それは完璧に動作します! ;) – Mallvina

0

私が正しく質問を理解していれば、次のコードをチェックアウト:

% Your data 
A = [1 9; 8 5; 5 9; 8 5; 9 9]; 
date = 8; 
user = 5; 

% Find how many times each unique user did the action at the certain date 
nb_occurences = size(A, 1) - size((setdiff(A, [date user], 'rows')), 1); 

キャッシュサイズ(A、1)(MATLABはあなたのためにそれを行うかどうかわからない)が必要であるが。

関連する問題