Use of cellfun to obtain the 2 element ONLY

3 views (last 30 days)
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 Comments
Walter Roberson
Walter Roberson on 28 Aug 2019
At least one of the elements of Mydata is an empty cell.
Natalia Lopez
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 '.'?

Sign in to comment.

Answers (2)

Bruno Luong
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 Comments
Natalia Lopez
Natalia Lopez on 28 Aug 2019
Thanks for your answer, I did try it and it now I got the error:
Index in position 2 exceeds array bounds (must not exceed 1).
%Importfile(Mydata)
load(Mydata.mat');
Mydata = xData(:,i); %coded as A1, A2, A3, A4, -> change to 1 2 3 4
Mydata = table2array(data2); % convert to cell array
ids= cellfun(@(x) x(2),data2); % to each cell, apply the inline function that takes the second element

Sign in to comment.


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

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!