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 件のコメント

the cyclist
the cyclist 2024 年 9 月 12 日
Can you upload the data (or a small representative sample)? You can use the paper clip icon in the INSERT section of the toolbar.

サインインしてコメントする。

 採用された回答

Drew
Drew 2024 年 9 月 12 日
編集済み: Drew 2024 年 9 月 12 日

0 投票

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 件のコメント

Vivien
Vivien 2024 年 9 月 12 日
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!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

製品

リリース

R2024b

質問済み:

2024 年 9 月 12 日

コメント済み:

2024 年 9 月 12 日

Community Treasure Hunt

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

Start Hunting!

Translated by