Looking for help with labelling groups

Hey everyone,
so far I've read all Matlab entrys on adding/creating categories and/or labels but I haven't found something fitting that works for me. I have a set of data in 178x13 double format, the variable names in a 1x13 cell format and the group classification in a 178x1 double, which ist just 1 2 and 3. In different projects I had a 178x1 cell instead containing the names of the groups and I would use that to generate a double using findgroups. However, now I would like to do the reverse action and generate a 178x1 cell value with the names instead of numbers. Num2Cell does not work here of course because I would like to tell Matlab to put "GroupA" for every 1 in the group classification 178x1 double and "GroupB" for every 2 and GroupC for every 3. I have information that the first 59 belog to GroupA etc, but I don't know how to implement that either. Maybe it's the language barrier but I really don't even know what to search for anymore. Any help is much appreciated!

1 Comment

Can you upload the data (or a small representative sample)? You can use the paper clip icon in the INSERT section of the toolbar.

Sign in to comment.

 Accepted Answer

Drew
Drew on 12 Sep 2024
Edited: Drew on 12 Sep 2024
Here is a solution:
% Your group classification vector
% This is a 7x1 double for an example.
% Yours would be 178x1 double
groupClassification = [1; 1; 2; 3; 2; 1; 3];
% Initialize a cell array for group names
groupNames = cell(size(groupClassification));
% Define the mapping from numbers to group names
groupNamesMap = {'GroupA', 'GroupB', 'GroupC'};
% Loop through each group classification and assign the corresponding name
for i = 1:length(groupClassification)
groupNames{i} = groupNamesMap{groupClassification(i)};
end
% Display the result
groupNames
groupNames = 7x1 cell array
{'GroupA'} {'GroupA'} {'GroupB'} {'GroupC'} {'GroupB'} {'GroupA'} {'GroupC'}
Or, alternately, using logical indexing:
groupClassification = [1; 1; 2; 3; 2; 1; 3];
% Or, use logical indexing
% Pre-allocate the cell array
groupNames = cell(size(groupClassification));
% Assign group names using logical indexing
groupNames(groupClassification == 1) = {'GroupA'};
groupNames(groupClassification == 2) = {'GroupB'};
groupNames(groupClassification == 3) = {'GroupC'};
% Display the result
groupNames
groupNames = 7x1 cell array
{'GroupA'} {'GroupA'} {'GroupB'} {'GroupC'} {'GroupB'} {'GroupA'} {'GroupC'}
If this answer helps you, please remember to accept the answer.

1 Comment

Thank you so much! I got so close with my idea but I messed up at the step with the loop. Much appreciated and now everything looks so much better!

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2024b

Asked:

on 12 Sep 2024

Commented:

on 12 Sep 2024

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!