1

次のデータを含む列があります:
サイズ: 100x7

val =

USA
USA
France
USA
France

データを円グラフで表示したい。これを行うには、この列に USA がどれくらい含まれているかを知る必要があります。
関数 unique,accumarray について読みましたが、成功
しませんでした。その方法についていくつか提案をしたいと思います。
ありがとう。

4

4 に答える 4

4

の 3 番目の出力を使用しunique、それらの入力文字列がcell配列内にあることを確認します。の 3 番目の出力はunique、入力に見られる一意の数量ごとに一意の ID を割り当てるため、非常に優れています。aそのため、 からまでの一連の文字がある場合、e見つかった一意の文字ごとに 1 ~ 5 の一意の ID が割り当てられますunique。入力で。

次にaccumarray、この 3 番目の出力で を使用して、リストされているすべての国で特定の国が表示された回数をカウントできます。

val = {'USA'; 'USA'; 'France'; 'USA'; 'France'};
[countries,~,id] = unique(val);
counts = accumarray(id, 1);

私は得る:

counts = 

2 
3

またのためにcountries:

countries = 

    'France'
    'USA'

の各要素はcounts、特定の国が の国と同じ位置にある回数に対応していることに注意してくださいcountries。したがって、フランスは 2 回、米国は 3 回表示されます。

于 2014-12-03T21:07:28.530 に答える
3

uniqueで使用できますhistc-

%// Get countries and their occurences
[countries,~,id] = unique(cellstr(val),'stable')
occurrences = histc(id,1:max(id))

次に、国名に対する出現数を表として表示できます-

>> table(countries,occurrences)
ans = 
    countries    occurrences
    _________    ___________
    'USA'        3          
    'France'     2       

出力を円グラフとして表示-

>> pie(occurrences,countries)

ここに画像の説明を入力

于 2014-12-03T21:08:30.097 に答える
0

これにより、正規表現を使用して出現回数が得られます。

unique_countries = unique(regexp(val,'^.*$','lineanchors','match','dotexceptnewline'));

count_unique_countries = zeros(size(unique_countries));
for ii = 1:numel(unique_countries)
    count_unique_countries(ii) = numel(regexp(val,['^' unique_countries{ii} '$'],'lineanchors'));
end

2 つの出力変数は次のようになります。

unique_countries = 
'France'    'USA'
count_unique_countries =
 1     2
于 2014-12-03T21:05:46.907 に答える
0

統計ツールボックスがある場合は、次の操作も実行できます。

valnom = nominal(val);
countries = getlabels(valnom);
occurrences = levelcounts(valnom);
于 2014-12-03T21:17:20.537 に答える