Search code examples
matlabmatrixcell

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!


Solution

  • 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]