Подсчет вхождений строк в столбце - Matlab

У меня есть столбец со следующими данными:
Размер: 100х7

val =

USA
USA
France
USA
France

Я хочу показать данные на круговой диаграмме. для этого мне нужно знать, сколько США встречается в этом столбце и так далее.
Я читал об уникальных функциях, но я не добился успеха
Я хотел бы получить некоторые предложения, как это сделать.
Благодарю.

4 ответа

Решение

Ты можешь использовать 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)

введите описание изображения здесь

Используйте третий вывод unique и убедитесь, что эти входные строки находятся в cell массив. Третий выход unique это довольно круто, потому что он назначает уникальный идентификатор для каждого уникального количества, которое видно на входе. Таким образом, если у вас была последовательность символов из a в e, он присваивает уникальный идентификатор каждому найденному уникальному символу в диапазоне от 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 раза.

Это даст вам количество вхождений с помощью 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

Если у вас есть набор инструментов статистики, вы также можете сделать следующее:

valnom = nominal(val);
countries = getlabels(valnom);
occurrences = levelcounts(valnom);
Другие вопросы по тегам