Use of cellfun to obtain the 2 element ONLY

2 Ansichten (letzte 30 Tage)
Natalia Lopez
Natalia Lopez am 28 Aug. 2019
Kommentiert: Bruno Luong am 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 Kommentare
Walter Roberson
Walter Roberson am 28 Aug. 2019
At least one of the elements of Mydata is an empty cell.
Natalia Lopez
Natalia Lopez am 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 '.'?

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Bruno Luong
Bruno Luong am 28 Aug. 2019
Bearbeitet: Bruno Luong am 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 Kommentare
Natalia Lopez
Natalia Lopez am 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
Bruno Luong
Bruno Luong am 28 Aug. 2019
Try my second method

Melden Sie sich an, um zu kommentieren.


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

Kategorien

Mehr zu Cell Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by