Parsing an array A based on trigger data in array B ?
    6 views (last 30 days)
  
       Show older comments
    
Hi everyone!
I have what should be a simply question but I cannot seem to find an effective solution. I have two columns of data in Excel files that I read into Matlab, at the moment as two separate arrays (column A and B).
Column A contains numeric data and Column B is a trigger stamp for the data in A. Example:

What I need to do is to parse A and split it into a number of (30) arrays depending on the trigger point in B i.e. the very large A would become A1, A2, A3 ... A30, split according to when there is a data-stamp in B.
2 Comments
  Jan
      
      
 on 3 Jul 2013
				Please post how you "read the Excel file". Then creating a matching answer is easier.
Accepted Answer
  Chad Gilbert
      
 on 3 Jul 2013
        If I save similar data out as a .csv file:
   A,B
   1.303,1
   1.61,
   4,2
   1.213,
and then read them in with:
   >> a = csvread('a.csv',1,0)
I get a matrix the same shape as your data, with 0's filling all the empty spots:
   a =
    1.3030    1.0000
    1.6100         0
    4.0000    2.0000
    1.2130         0
This will be pretty easy to parse into a cell array of arrays.
3 Comments
  Chad Gilbert
      
 on 3 Jul 2013
				
      Edited: Chad Gilbert
      
 on 3 Jul 2013
  
			Ah, I see. I thought your trouble was with reaading. To split it up, Rob's answer ought to work. Or a shorter version might be:
   ind = [find(a(:,2)>0); size(a,1)+1];
   b = arrayfun(@(i)a(ind(i):ind(i+1)-1),1:length(ind)-1,'uniformoutput',false)
More Answers (1)
  Rob
 on 3 Jul 2013
        
      Edited: Rob
 on 3 Jul 2013
  
      I'm sure there are more elegant solutions, but here's one way:
idx1 = find(~isnan(B));
idx2 = [idx1(2:end)-1; length(A)];
C = cell(length(idx1), 1);
for k = 1:length(idx1)
   C{k} = A(idx1(k):idx2(k));
end
If the non trigger values in B are zeros then:
idx1 = find(B>0);
-Rob
0 Comments
See Also
Categories
				Find more on Logical 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!


