MATLAB Answers

Converting categorical data to prespecified numbers

10 ビュー (過去 30 日間)
Danielle Leblance
Danielle Leblance 2018 年 5 月 8 日
Edited: Walter Roberson 2018 年 5 月 8 日
Hi,
I have a categorical array : ['SC' 'SC' 'SC' 'SC' 'SC' 'SC' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'MI' 'MI' 'MI' 'MI' 'MI' 'MI' 'MI' 'MI' 'MN' 'MN' 'MN' 'MN' 'MN' 'MN'];
I want to convert each category to a number of my choice: for instance SC should be 23, GA=10;MI=13,MN=15 etc... How can I do so?

  0 件のコメント

サインイン to comment.

採用された回答

Guillaume
Guillaume 2018 年 5 月 8 日
keys = categorical({'SC', 'GA', 'MI', 'MN'});
values = [23, 10, 13, 15];
[found, where] = ismember(yourcategoricalarray, keys)
correspondingvalues = nan(size(yourcategoricalarray));
correspondingvalues(found) = values(where(found));
correspondingvalues will be nan for those entries you don't care about.

  0 件のコメント

サインイン to comment.

More Answers (1)

Ameer Hamza
Ameer Hamza 2018 年 5 月 8 日
You can do the do this as follow,
data = {'SC' 'SC' 'SC' 'SC' 'SC' 'SC' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA'...
'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA'...
'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA' 'GA'...
'GA' 'GA' 'GA' 'GA' 'MI' 'MI' 'MI' 'MI' 'MI' 'MI' 'MI' 'MI' 'MN' 'MN'...
'MN' 'MN' 'MN' 'MN'};
dataCategorical = categorical(data);
tablePattern = categorical({'SC', 'GA', 'MI', 'MN'}); % make list of all unique pattern
valueValue = [23, 10, 13, 15]; % make list of all values corrosponding to unique patterns
index = (dataCategorical' == tablePattern)*(1:4)';
data2Value = valueValue(index);

  6 件のコメント

表示 3 件の古いコメント
Ameer Hamza
Ameer Hamza 2018 年 5 月 8 日
What you want to do about those categories. Do you want to just remove them or make them equal to zero? If you just remove them then you will have no way of knowing that which element in data2Value corresponds to which element in data because several values are missing. It depend on what you want to do with those values.
Danielle Leblance
Danielle Leblance 2018 年 5 月 8 日
make them nan. I will look at Guillaume's answer
Guillaume
Guillaume 2018 年 5 月 8 日
Note that you could have used the same method as in my answer (construct nan matrix, then fill with valueValue(index)) with Ameer's method. However using ismember is probably faster and certainly a lot less demanding in memory than the 2D array generated by the implicit expansion of ==

サインイン to comment.

サインイン してこの質問に回答します。

タグ


Translated by