数列的字符串出现次数 - Matlab的(Count occurences of strings

2019-10-21 09:03发布

我有以下数据的列:
尺寸:100x7

val =

USA
USA
France
USA
France

我想显示饼图上的数据。 要做到这一点,我需要知道美国有多少会出现在此列,依此类推。
我读的功能独特,accumarray但我不取得成功
我想获得一些建议,如何做到这一点。
谢谢。

Answer 1:

您可以使用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)



Answer 2:

使用的第三输出unique ,并确保这些输入字符串是在一个cell阵列。 的第三输出unique是相当凉的,因为它分配对于在输入端看的每个唯一数量的唯一ID。 因此,如果你有字符序列从ae ,这将分配一个唯一的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倍。



Answer 3:

如果你有统计工具箱,你也可以做到以下几点:

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


Answer 4:

这会给你出现的次数,通过使用正则表达式:

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


文章来源: Count occurences of strings in column - Matlab