2016-07-21 25 views
0

こんにちは、私は年と文字列で構成される一連のデータを持っています。私は各文字列が毎年発生する回数を数えたいと思います。例えば、ユニークな行のカウント数Matlab

文字列
1998キー
1998キー

文字列
1997キー
1998文字列
1997文字列
1997 1997年と私はそれが

1997の文字列を返すようにしたい3
1997年キー1
1998 stri ng 1
1998 key 2

約7,000値の大きなcsvファイルからエクスポートするときにこれらをテーブルまたはセル配列としてフォーマットするのは混乱します。ユニークな新しいテーブルを作成する方法値と出現回数

+0

このデータをMATLABに移植すると、どのように表示されますか? 2つのベクトル?セル配列?表?構造?より良い回答を得るためにこれを指定してください(または、より良い方法では、サンプルデータを作成するコードを提供してください)。これは 'unique(A、' rows ') 'と' accumarray'の何らかの組み合わせでおそらく答えることができます。 –

答えて

0

ユニークとhistcountの組み合わせを使用できます。

strings = {'1997 string' 
    '1997 string' 
    '1997 string' 
    '1997 key' 
    '1998 string' 
    '1998 key' 
    '1998 key'}; 
[uniqueStrings, ~, uniquePositions] = unique(strings); 
uniqueCounts = histcounts(uniquePositions)'; 
[uniqueStrings, num2cell(uniqueCounts)] 
+0

"1997"と "string"セクションを別々のまま(テーブルの2つの異なる列)にしておくと、これを行うことは可能でしょうか? –

+0

私はあなたが何を望んでいるのか分かりません。新しいリクエストを表示するためにサンプルを編集するか、新しい質問をしてください。 – user1543042

0

あなたは、私はこれが動作すると思いますテーブルにあるデータを気にしない場合:

data = {'1997', 'string'; '1997', 'string'; '1997', 'string'; '1997', 'key'; '1998', 'string'; '1998', 'key'; '1998', 'key'}; 

data_table = cell2table(data); 
[unique_data,cnt] = unique(data_table,'rows'); 

data_table_combined = strcat(data_table.data1,'_',data_table.data2); 
unique_combined = strcat(unique_data.data1,'_',unique_data.data2); 

for i = 1:length(unique_combined) 
    b = strfind(cell(data_table_combined),char(unique_combined(i))); 
    count(i) = sum(cell2mat(b)); 
end 

count_table = table(count'); 
NT = [unique_data,count_table] 

それは、このテーブルを生成します。

NT =

data1  data2  Var1 
______ ________ ____ 

'1997' 'key'  1 
'1997' 'string' 3 
'1998' 'key'  2 
'1998' 'string' 1 

table2cell(NT)を使用して、それをセル配列にすることもできます。

これが役に立ちます。

関連する問題