Подсчет вхождений строк в столбце - 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);