MATLAB: Grouping structures together based on filter

structures

Hi I have a structure that looks like the below
a
=
mydata:[135x6]
myid:{1x6}
mydates = [135x1]
I would like to separate out data into positive and negative I would go through each column in mydata and filter for positive and negative and match it to the corresponding dates
so that in the end i have 6 structures
so for example
apos(1)
=
mydata:[120x1]
mydates:[120x1]
myid ={1}
is there a clean way to do this rather than using a for loop?
Thanks, HD

Best Answer

aneg = cell2mat( arrayfun( @(K) struct( 'mydata', a.mydata(a.mydata(:,K) < 0,K), 'mydates', a.mydates(a.mydata(:,K) < 0), 'myid', a.myid(K)), 1:size(a.mydata,2),'Uniform', 0) );
apos = cell2mat( arrayfun( @(K) struct( 'mydata', a.mydata(a.mydata(:,K) > 0,K), 'mydates', a.mydates(a.mydata(:,K) > 0), 'myid', a.myid(K)), 1:size(a.mydata,2),'Uniform', 0) );
Question: what if the data is exactly 0?