Maddy
Maddy

Reputation: 2570

Replace strings with integer IDs in a Cell - Matlab

I have a cell that has string IDs. I need to replace them with integer IDs so that the cell can be transformed into a matrix. I especially need this to be a vectorized operation as the celldata is huge.

celldata = { 'AAPL' [0.1] ; 'GOOG' [0.643] ; 'IBM' [0.435] ; 'MMM' [0.34] ; 'AAPL' [0.12] ; 'GOOG' [1.5] ; 'IBM' [0.75] ; 'AAPL' [0.56] ; 'GOOG' [0.68] ; 'IBM' [0.97] ; };

I designed a sequential intID:

intIDs = {'AAPL' [1] ; 'GOOG' [2] ; 'IBM' [3] ; 'MMM' [4]};

intIDs contain ALL IDs that are possible in celldata. Also, celldata has IDs in sequential order and grouper together by dates. The date column is not shown here.

Desired result:

celldata = {[1] [0.1] ; [2] [0.643] ; [3] [0.435] ; [4] [0.34] ; [1] [0.12] ; [2] [1.5] ; [3] [0.75] ; [1] [0.56] ; [2] [0.68] ; [3] [0.97] ;};

Thanks!

Upvotes: 1

Views: 2089

Answers (1)

abcd
abcd

Reputation: 42225

You can use the ismember function and logical indexing to achieve what you want.

[~,indx]=ismember(celldata(:,1),intIDs(:,1));
celldata(:,1)=intIDs(indx,2)

celldata = 

    [1]    [0.1000]
    [2]    [0.6430]
    [3]    [0.4350]
    [4]    [0.3400]
    [1]    [0.1200]
    [2]    [1.5000]
    [3]    [0.7500]
    [1]    [0.5600]
    [2]    [0.6800]
    [3]    [0.9700]

Upvotes: 3

Related Questions