1

我有一列包含以下数据:
大小:100x7

val =

USA
USA
France
USA
France

我想在饼图上显示数据。要做到这一点,我需要知道这个专栏中有多少 USA,等等。
我读到了函数 unique,accumarray 但我没有成功
我想得到一些建议如何做到这一点。
谢谢。

4

4 回答 4

4

使用 的第三个输出unique,并确保这些输入字符串在一个cell数组中。的第三个输出unique非常酷,因为它为输入中看到的每个唯一数量分配一个唯一 ID。因此,如果您有一个从ato的字符序列e,它将为它找到的每个唯一字符分配一个唯一 ID,介于 1 和 5 之间。此外,第一个输出unique为您提供一个仅包含唯一数量的数组在输入。

然后,您可以使用accumarray第三个输出来计算您在所有列出的国家/地区中看到特定国家/地区的次数。

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

如果您有统计工具箱,您还可以执行以下操作:

valnom = nominal(val);
countries = getlabels(valnom);
occurrences = levelcounts(valnom);
于 2014-12-03T21:17:20.537 回答
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

两个输出变量现在是

unique_countries = 
'France'    'USA'
count_unique_countries =
 1     2
于 2014-12-03T21:05:46.907 回答