# how can i change cell array to matrix

2 views (last 30 days)
Abebe kebede on 16 Mar 2015
Answered: Abebe kebede on 17 Mar 2015
I have excel mixed file and used [T,M,dat]=xlsread('Mol.xlsx')to import to matlab
dat= 'A'  [-20] [-75]  'B'  [-10] [-50]  'C'  [-25] [10 ]  'D'  [-15]  
I want to remove row if the value of column 3 is >= -15. so i used the following criteria, dat(dat(:,3)>=-15,:)=[] but i get the following error Undefined function or method 'ge' for input arguments of type 'cell'. how can i solve this problem?

Guillaume on 16 Mar 2015
Since you have mixed data types you can't convert the cell array into a matrix. You could just operate on the numeric matrix T and text matrix M with:
rowstodelete = T(:, 3) >= -15;
T(rowstodelete, :) = [];
M(rowstodelete, :) = [];
dat(rowstodelete, :) = [];
Simpler, would be to use a table which can handle mixed data types and has a more intuitive syntax than cell arrays. It's also dead easy to import excel data into a table:
t(t(:, 3) >= -15, :) = [] %delete rows for which column 3 is >=-15

Giorgos Papakonstantinou on 16 Mar 2015
Edited: Giorgos Papakonstantinou on 16 Mar 2015
You can do the following to find which values are >=-15 :
dat= {'A'  [-20] [-75]  'B'  [-10] [-50]  'C'  [-25] [10 ]  'D'  [-15]  };
dat(cellfun(@(x) x>=-15 & ~ischar(x), dat)) = [];
Of course the result will be again a cell.
However, the T output argument from xlsread will be be of class double so there will be no need to go through the cellfun command.
You can see this with a minimum example:
values = {'A'  [-20] [-75]  'B'  [-10] [-50]  'C'  [-25]   'D'  [-15]  };
xlswrite('myExample.xlsx',values);
filename = 'myExample.xlsx';
Then:
T =
12 -20 -75 66 NaN 9 -10 -50 55 NaN 15 -25 10 45 NaN 14 -15 5 20
If you want simply to remove them:
T(>=-15) = [];

Abebe kebede on 17 Mar 2015
Thank you very much guys.