Start Cumsum from table of values that correspond with given indeces
    8 views (last 30 days)
  
       Show older comments
    
Hello, I have a timetable of values called ddtable with column 'RAIN' and an array of index called startdd. 
The objective:
1) If index of ddtable matches with startdd, start cumsum for subsequent RAIN values until it exceeds 3.5 then stop.
2) Append all indices that were involved in the cumsum into a new table
How do I go about this because traditional while loop does not work as well and no discussion have addressed this type of question.
for ii = 1:length(rain)
%  If rain index matches with startdd, start cumulation
   if idx(rain) == startdd
       %  The cumulation will end once it exceeds 3.5mm
       while cumsum(rain(startdd)) < 3.5
%            Append all index values that were involved in the cumsum
       end
   end
end
Many thanks!
2 Comments
  Eric Sofen
    
 on 18 Dec 2020
				The data in your MAT files doesn't match up with your example code, so I'm not 100% sure what you're trying to do, but see if this does the trick.
load('ddtable.mat')
load('startdd.mat')
result =ddtable([],:);
inds = [];
for ii = startdd % Iterate over start indices
    cs = cumsum(ddtable.RAIN(ii:end)); %do cumsum over most of the rain data - we'll end up throwing away anything beyond 3.5 mm
    inds3_5 = ii-1 + find(cs <= 3.5); % Find where data is below the 3.5mm threshold; adjust based on the start index.
    result = [result; ddtable(inds3_5,:)]; % append data
    inds = [inds; inds3_5]; % append indices
end
Answers (0)
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!
