# Use of cellfun to obtain the 2 element ONLY

6 views (last 30 days)
Natalia Lopez on 28 Aug 2019
Commented: Bruno Luong on 28 Aug 2019
Hi!
So I have a dataset with all the elements/answers being: 'A1 A2 A3 A4'. I need to transform those elements into '1, 2, 3,4'. Basically I just need to get rid of the 'A'. I have been trying this > Mydata=cellfun(@(x)x(2),Mydata); Im trying to extract the second element only (1,2,3,4) for the whole dataset but I get the followign error:
Index exceeds the number of array elements (0).
Error in @(x)x(2)
The format is 'cell' (not table). I then need to apply a fuction to substract 1 to each element, so 1=0, 2=1, 3=2 and 4=3. If anyone could help me i would really appreciate it! I'm obviously very new to matlab.
Many thanks!
##### 2 CommentsShowHide 1 older comment
Natalia Lopez on 28 Aug 2019
Thank you for your answer, yes I do have some missing data points. is there a way I can go around this? maybe just substituing the missing points for Nan or '.'?

Bruno Luong on 28 Aug 2019
Edited: Bruno Luong on 28 Aug 2019
>> c={'A1' 'A2' 'A3' 'A4' ''}
c =
1×5 cell array
{'A1'} {'A2'} {'A3'} {'A4'} {0×0 char}
This throw an error
Mydata=cellfun(@(x)x(2),c)
Index exceeds the number of array elements (0).
Error in @(x)x(2)
This works but returns -16 for empty cell.
a=char(c);
num=a(:,2)-'0'
num =
1
2
3
4
-16
You can replace with NaN
num(num<0)=NaN
num =
1
2
3
4
NaN
##### 2 CommentsShowHide 1 older comment
Bruno Luong on 28 Aug 2019
Try my second method

Walter Roberson on 28 Aug 2019
cellfun(@(S) sscanf(S,'%*c%d'), c, 'uniform', 0)