Delete rows from a cell array based on key words

1 次查看(过去 30 天)
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.

采纳的回答

Voss
Voss 2022-1-28
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);
{'6440.016' } {'hold' } {'19050.016'} {'max-pressure-evac 60.0'} {'19424.016'} {'hold-end' } {'19553.016'} {'hold' } {'21109.016'} {'max-pressure-evac 60.0'} {'21919.016'} {'hold-end' } {'22048.016'} {'hold' } {'23374.016'} {'max-pressure-evac 60.0'} {'23489.016'} {'hold-end' } {'23619.016'} {'hold' } {'24762.016'} {'max-pressure-evac 60.0'} {'25060.016'} {'hold-end' } {'25190.016'} {'hold' } {'26212.016'} {'max-pressure-evac 60.0'} {'26631.016'} {'hold-end' }
Showing the relevant intermediate variables' values so you can get a feel for how this works:
disp(idx.')
0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
disp(strfind([idx.' false],[true false]))
14 18 22 26 30

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Debugging and Analysis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by