For each non NaN value in the 2rd column, remove the entire row of Cell

1 view (last 30 days)
raw= [UPS CALL;WMB NaN;LNG NaN; XLE PUT ;DIS CALL]
('raw' is a cell in my case)
Here is what I have so far but it does not work:
[dummy,dummy,raw] = xlsread(fullfile(source_dir,source_files(i).name));
Equity_only = cellfun(@isfinite,raw(:,2),'un',0)
raw=cell2table(raw)
raw(Equity_only,:) = []
raw = table2cell(raw);
Help please!

Answers (3)

Jos (10584)
Jos (10584) on 9 Jul 2014
Despite raw being a cell, are there only numbers in the second column? If so:
tf = isnan(vertcat(raw{:,2})) ;
raw2 = raw(tf,:)
If not
tf = cellfun(@(E) numel(E)==1 && isnumeric(E) && isnan(E), raw(:,2))
raw2 = raw(tf,:)
(I am not sure about the "not" in your title. Perhaps you need ~tf ??)

Florent
Florent on 10 Jul 2014
Edited: Star Strider on 10 Jul 2014
Thanks a lot, that really help!
tf = cellfun(@(E) numel(E)==1 && isnumeric(E) && isnan(E), raw(:,2))
raw2 = raw(tf,:)
Was what I needed!
Now, how do I do if I only want to keep rows with certain strings, for example 'CALL', as well as the NaN value (but remove rows with all other strings)?

Andrei Bobrov
Andrei Bobrov on 10 Jul 2014
tf = cellfun(@(E) (numel(E)==1 && isnumeric(E) && isnan(E))...
||(all(isletter(E))&&strcmp('CALL',E)), raw(:,2));
raw2 = raw(tf,:);

Categories

Find more on Data Type Conversion in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!