Count number of unique values in column one, for each unique value in column 2
42 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I've been faced with a problem that is giving me lots of trouble. I need to calculate the number of unique records in one column for each unique record in the second column. For example: If I have
Activities = {'walk', 'monday'; 'walk', 'monday'; 'eat', 'monday'; 'TV', 'tuesday'; 'run','wednesday'; 'eat', 'wednesday';...}
'call', 'Thursday';'work', 'Thursday'; 'call', 'Thursday';'work', 'Thursday';'sleep','Thursday'}
What I'd like in another column is the total number of unique activies for each unique day, formatted like "Result".
Result = [2;2;2;1;2;2;3;3;3;3;3]
1 commentaire
WAT
le 29 Sep 2015
This seems to be a repeat of http://www.mathworks.com/matlabcentral/answers/245839-count-the-number-of-occurrences-of-elements-in-second-column
Réponse acceptée
Star Strider
le 29 Sep 2015
Modifié(e) : Star Strider
le 29 Sep 2015
Expanding on Andrei Bobrov’s Answer to a related Question:
[~,~,ic1] = unique(Activities(:,1), 'stable'); % Unique Activities
[~,~,ic2] = unique(Activities(:,2), 'stable'); % Unique Days
H = accumarray([ic1 ic2], 1); % Histogram
LH = sum(H > 0); % Sum Logical Array
SH = sum(H); % Sum Event Array
Result = [];
for k1 = 1:length(LH)
Result = [Result; repmat(LH(k1), SH(k1), 1)]; % Create ‘Result’ Vector
end
3 commentaires
Star Strider
le 29 Sep 2015
My pleasure!
To be a bit more descriptive, LH is the sum of different events per day, and SH is the number of total events per day.
Andrei Bobrov
le 29 Sep 2015
[~,~,ic1] = unique(Activities(:,1), 'stable');
[~,~,ic2] = unique(Activities(:,2), 'stable');
H = accumarray([ic1 ic2], 1);
Result = repelem(sum(H > 0),sum(H));
or
H1 = sum(H > 0);
Result = H1(ic2);
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Characters and Strings 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!