计算列中字符串的出现次数 - Matlab

时间:2014-12-03 21:00:39

标签: matlab unique accumarray

我有一个包含以下数据的专栏:
尺寸:100x7

val =

USA
USA
France
USA
France

我想在饼图上显示数据。要做到这一点,我需要知道本专栏中有多少美国出现,等等 我读到了关于独特的功能,但是我没有成功 我想知道如何做到这一点。
谢谢。

4 个答案:

答案 0 :(得分:4)

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

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

unique

我明白了:

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

同样适用于counts = 2 3

countries

请注意countries = 'France' 'USA' 的每个元素对应于您在counts中看到与该国家位置相同的特定国家/地区的次数,因此法国被视为2次,美国被视为3次。< / p>

答案 1 :(得分:3)

您可以将uniquehistc -

一起使用
%// 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)

enter image description here

答案 2 :(得分:0)

这将通过使用regexp:

为您提供出现次数
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

答案 3 :(得分:0)

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

valnom = nominal(val);
countries = getlabels(valnom);
occurrences = levelcounts(valnom);