How to calculate the number from a database
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have a struct which records 10 TV, in each struct the film's countries are provided.
There're 3 different countries(US, CN, CA) in the struct. I need to determine the total amount of TV shot by each countries.
I tried to use this function, but it only works for a single country, when the I add more than one country, the total number is inaccurate.
function [countries, count] = movies_countries(films)
count = ['US';'CA';'CN'];
US = [];CA = [];CN = [];
countries = [];
for ii = 1:length(TV)
if ~isempty(strfind(upper(TV(ii).country),'US'))
US(end+1) = ii;
A1 = size(US);
B1 = A1(1,2);
if ~isempty(strfind(upper(TV(ii).country),'CA'))
CA(end+1) = ii;
A2 = size(CA);
B2 = A2(1,2);
if ~isempty(strfind(upper(films(ii).country),'CN'))
FR(end+1) = ii;
A3 = size(CN);
B3 = A3(1,2);
countries = [B1 B2 B3]
end
end
end
This is the database:
TV(1).country = 'US';
TV(2).country = 'US';
TV(3).country = 'CN';
TV(4).country = 'CN';
TV(5).country = 'CA';
TV(6).country = 'US';
TV(7).country = 'CN';
TV(8).country = 'CN';
TV(9).country = 'US';
TV(10).country = 'US'
The final output should looks like:
countries = 'US'; 'CN';'CA'
count = 5 4 1
5 commentaires
Réponse acceptée
Akira Agata
le 30 Nov 2021
How about the following?
List = arrayfun(@(x) x.country, TV,...
'UniformOutput', false);
[Group, Country] = findgroups(List');
Count = accumarray(Group,1);
>> Country
Country =
3×1 cell array
{'CA'}
{'CN'}
{'US'}
>> Count
Count =
1
4
5
3 commentaires
Akira Agata
le 8 Déc 2021
I believe the following will work for such case:
List = arrayfun(@(x) x.country, TV,...
'UniformOutput', false);
List2 = cellfun(@(x) split(x,'''')', List,...
'UniformOutput', false);
List2 = [List2{:}];
[Group, Country] = findgroups(List2');
Count = accumarray(Group,1);
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Interactive Model Editing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!