Home Replacing string values in cell array with numbers
Reply: 1

Replacing string values in cell array with numbers

mHelpMe
1#
mHelpMe Published in 2017-12-07 09:16:16Z

I have a cell array which contains some descriptions, namely my_des.

 my_des = [{'FRD'} {'1'}; {'UNFRD'} {'2'}; {'OTH'} {'3'};];

I also have an approximately 5000x1 cell array. The elements in this array are either 'FRD', 'UNFRD' or 'OTH'.

What I want to do is replace these text values with the corresponding numeric values in my_des.

Currently my only idea (which I think isn't that great) is to loop through my_des and do a string replacement.


Example:

So say my current vector looks like this:

FRD
FRD
OTH
UNFRD
OTH
FRD

Then my desired output would be this:

1
1
3
2
3
1

The numbers come from the my_des array

Wolfie
2#
Wolfie Reply to 2017-12-07 09:41:32Z

Do you want to use the characters '1', '2', '3' or just the numbers 1, 2, 3? The distinction is the difference between a 1 line answer and a 2 line answer!

Based on your example, let's use the following data:

arr = {'FRD'; 'FRD'; 'OTH'; 'UNFRD'; 'OTH'; 'FRD'};

Get the row index within my_des of each element in arr, and use that to get the corresponding 2nd column values...

% If you just want the *number* then this is all you need
[~, idx] = ismember(arr, my_des);
% idx is the row within column 1 of my_des where the value in arr is found
% >> idx = [1; 1; 3; 2; 3; 1]

% If you want to get the values my_des then use idx as a row index
out = mydes(idx, 2);
% out is the corresponding values from the 2nd column of my_des, whatever they may be.
% >> out = {'1'; '1'; '3'; '2'; '3'; '1'};

Aside: why are you declaring a cell array by concatenating 1-element cell arrays for my_des? Instead, you can just do this:

my_des = {'FRD',   '1'; 
          'UNFRD', '2'; 
          'OTH',   '3'};
You need to login account before you can post.

About| Privacy statement| Terms of Service| Advertising| Contact us| Help| Sitemap|
Processed in 0.356499 second(s) , Gzip On .

© 2016 Powered by mzan.com design MATCHINFO