Clear Filters
Clear Filters

Find Consecutive numbers and print value in next collumn

1 view (last 30 days)
Hi,
I have a table of 4 collumns with over a million rows. In collumn 4 I have a collumn that iis based on logic (when the temperature in collumn 3 exceeds a given value the entry in collumn 4 will be one and when it does not exceed it will be 0).
In collumn 5 I would like to have a count of the number of consectutive values placed in the row of the final 1.
I have used the following to get a vector of containing the consecutive counts, but I am unsure how to get them to print in collumn five at the end of each cosecutive set
f = find(diff([0,exceedlogic,0]==1));
p = f(1:2:end-1); % Start indices
y = f(2:2:end)-p; % Consecutive ones’ counts
  2 Comments
David Hill
David Hill on 13 Jul 2021
A simple example showing a few rows would be helpful
Patrick Lonergan
Patrick Lonergan on 13 Jul 2021
The data set is rather large but I have taken some screen shots of the table. The table is in fact 5 collumns. \
As you can see collumn 5 is filled with 0 and 1 (logic), in collumn six I would like the consecutive count. For example in row 19 collumn 6 the value 1 would be inserted, while in row 247 collumn 6 should be the value of 2.
I hope that clears things up.

Sign in to comment.

Accepted Answer

Image Analyst
Image Analyst on 13 Jul 2021
Try this:
fprintf('Beginning to run %s.m ...\n', mfilename);
% Create sample data because none was attached to the question.
data = rand(200, 6);
data(:, 5) = data(:, 4) > 0.3;
data(:, 6) = 0
% Now we have our data and can begin.
%==================================================================
% Measure lengths of each run of 1s.
props = regionprops(logical(data(:, 5)), 'Area', 'PixelList');
% Assign area to the very last row of 1s.
for k = 1 : length(props)
lastRow = props(k).PixelList(end, 2)
data(lastRow, 6) = props(k).Area;
end
%==================================================================
fprintf('Done running %s.m.\n', mfilename);
Main code is between the ============== of course.

More Answers (1)

David Hill
David Hill on 13 Jul 2021
Simple loop works
c=0;
f(:,6)=0;
for k=1:size(f,1)
if f(k,5)==1
c=c+1;
f(k,6)=c;
else
c=0;
end
end

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!