# How to keep rows whose values follow a certain sequence?

8 views (last 30 days)
Lu Da Silva on 3 Feb 2022
Commented: Stephen23 on 3 Feb 2022
I have a matrix composed of two columns A and B, I need to only keep the rows which contain the sequence 90-180-270:
A B A B
-------- ----------
90 1 90 1
180 9 180 9
270 2 270 2
90 0 -> 90 0
270 3 180 4
90 0 270 6
180 4
270 6
How can I implement this into a Matlab code?
Lu Da Silva on 3 Feb 2022
Edited: Lu Da Silva on 3 Feb 2022
Yes, the actual sequence is 90, 180, 270. But that shouldn't matter, the code should work for any given sequence.

Stephen23 on 3 Feb 2022
Edited: Stephen23 on 3 Feb 2022
Here is an old MATLAB trick that you can use, which still works today:
Where M is your matrix and S is the desired sequence:
S = [90,180,270]; % the required sequence
M = [90,1;180,9;270,2;90,0;270,3;90,0;180,4;270,6]
M = 8×2
90 1 180 9 270 2 90 0 270 3 90 0 180 4 270 6
X = strfind(M(:,1).',S);
Y = X-1+(1:numel(S)).';
Z = M(Y,:)
Z = 6×2
90 1 180 9 270 2 90 0 180 4 270 6
Stephen23 on 3 Feb 2022
@David Hill: just two steps: STRFIND and some simple indexing :)

### More Answers (1)

David Hill on 3 Feb 2022
s=strfind(num2str(yourMatrix(:,1))','123');
newMatrix=[];
for k=1:length(s)
newMatrix=[newMatrix;yourMatrix(s(k):s(k)+2,:)];
end
##### 2 CommentsShowHide 1 older comment
David Hill on 3 Feb 2022
This should work.
r=yourMatrix(:,1);
r(r==90)=1;r(r==180)=2;r(r==270)=3;%change based on sequence desired
f=strfind(num2str(r)','123');
newMatrix=[];
for k=1:length(f)
newMatrix=[newMatrix;yourMatrix(f(k):f(k)+2,:)];
end