Delete rows from a cell array based on key words
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Justin Rosenthal
am 28 Jan. 2022
Kommentiert: Justin Rosenthal
am 28 Jan. 2022
Hello,
I have currently created a cell array that takes the following form:
'6440.016' 'hold'
'7378.016' 'max-pressure-evac 60.0'
'8372.016' 'max-pressure-evac 60.0'
'9365.016' 'max-pressure-evac 60.0'
'10357.016' 'max-pressure-evac 60.0'
'11338.016' 'max-pressure-evac 60.0'
'12298.016' 'max-pressure-evac 60.0'
'13259.016' 'max-pressure-evac 60.0'
'14221.016' 'max-pressure-evac 60.0'
'15184.016' 'max-pressure-evac 60.0'
'16149.016' 'max-pressure-evac 60.0'
'17115.016' 'max-pressure-evac 60.0'
'18082.016' 'max-pressure-evac 60.0'
'19050.016' 'max-pressure-evac 60.0'
'19424.016' 'hold-end'
'19553.016' 'hold'
'20272.016' 'max-pressure-evac 60.0'
'21109.016' 'max-pressure-evac 60.0'
'21919.016' 'hold-end'
'22048.016' 'hold'
'22651.016' 'max-pressure-evac 60.0'
'23374.016' 'max-pressure-evac 60.0'
'23489.016' 'hold-end'
'23619.016' 'hold'
'24131.016' 'max-pressure-evac 60.0'
'24762.016' 'max-pressure-evac 60.0'
'25060.016' 'hold-end'
'25190.016' 'hold'
'25640.016' 'max-pressure-evac 60.0'
'26212.016' 'max-pressure-evac 60.0'
'26631.016' 'hold-end'
If there are consecutive rows that say 'max-pressure-evac 60.0', I wish to only keep the final 'max-pressure-evac 60.0' and delete the ones above it. To clarify, here I have 5 different occaisons where 'max-pressure-evac 60.0' is repeated. Instead of having 21 'max-pressure-evac 60.0' rows I only want 5 which correspond to the time stamps of 19050, 21109, 23374, 24762, and 26212. I'm unable to wrap my mind around accomplishing this and any help would be greatly appreciated.
0 Kommentare
Akzeptierte Antwort
Voss
am 28 Jan. 2022
data = { ...
'6440.016' 'hold'; ...
'7378.016' 'max-pressure-evac 60.0'; ...
'8372.016' 'max-pressure-evac 60.0'; ...
'9365.016' 'max-pressure-evac 60.0'; ...
'10357.016' 'max-pressure-evac 60.0'; ...
'11338.016' 'max-pressure-evac 60.0'; ...
'12298.016' 'max-pressure-evac 60.0'; ...
'13259.016' 'max-pressure-evac 60.0'; ...
'14221.016' 'max-pressure-evac 60.0'; ...
'15184.016' 'max-pressure-evac 60.0'; ...
'16149.016' 'max-pressure-evac 60.0'; ...
'17115.016' 'max-pressure-evac 60.0'; ...
'18082.016' 'max-pressure-evac 60.0'; ...
'19050.016' 'max-pressure-evac 60.0'; ...
'19424.016' 'hold-end'; ...
'19553.016' 'hold'; ...
'20272.016' 'max-pressure-evac 60.0'; ...
'21109.016' 'max-pressure-evac 60.0'; ...
'21919.016' 'hold-end'; ...
'22048.016' 'hold'; ...
'22651.016' 'max-pressure-evac 60.0'; ...
'23374.016' 'max-pressure-evac 60.0'; ...
'23489.016' 'hold-end'; ...
'23619.016' 'hold'; ...
'24131.016' 'max-pressure-evac 60.0'; ...
'24762.016' 'max-pressure-evac 60.0'; ...
'25060.016' 'hold-end'; ...
'25190.016' 'hold'; ...
'25640.016' 'max-pressure-evac 60.0'; ...
'26212.016' 'max-pressure-evac 60.0'; ...
'26631.016' 'hold-end'; ...
};
% gonna calculate the indices of the rows we want to keep.
% first make a vector of indices of all rows:
all_idx = 1:size(data,1);
% then find whether or not each row has 'max-pressure-evac 60.0':
idx = strcmp(data(:,2),'max-pressure-evac 60.0');
% now, keep those rows that do not say 'max-pressure-evac 60.0'
% (all_idx(~idx)), along with those rows that *do* say
% 'max-pressure-evac 60.0', if the next row says something else
% (or if it's the last row of data - there is no next row):
keep_idx = [all_idx(~idx) strfind([idx.' false],[true false])];
% grab those rows of data, in the right order:
new_data = data(sort(keep_idx),:);
disp(new_data);
Showing the relevant intermediate variables' values so you can get a feel for how this works:
disp(idx.')
disp(strfind([idx.' false],[true false]))
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Debugging and Analysis finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!