How do i filter out certain values in a cell matrix using conditions for strings ?

27 Ansichten (letzte 30 Tage)
I have a cell matrix-
x = { 1 2 'a' 'q' ; 2 3 'a' 'p'; 3 4 'a' 'q'; 5 6 'b' 'p' ; 7 8 'b' 'q' ;9 8 'b' 'q';};
or x =
1 2 a q
2 3 a p
3 4 a q
5 6 b p
7 8 b q
9 8 b q
I want to filter out all rows that have 'a' in the 3rd column and 'q' in the fourth. My result matrix should be-
result=
1 2 a q
3 4 a q
How do I do this?

Akzeptierte Antwort

ANKUR KUMAR
ANKUR KUMAR am 10 Okt. 2018
Bearbeitet: ANKUR KUMAR am 10 Okt. 2018
You can use contains to find the required letter. contains gives true if the part of search string contains in the main string.
x(contains(x(:,3),'a') & contains(x(:,4),'q'),(3:4))
Better to use strcmp, as it check for complete string. strcmp checks for the complete strings. It gives true only when the complete string is present.
x(strcmp(x(:,3),'a') & strcmp(x(:,4),'q'),(3:4))
  3 Kommentare
ANKUR KUMAR
ANKUR KUMAR am 10 Okt. 2018
"(3:4) " is used because you wish to extract 3rd and fourth column as output. If you wish all, then use
x(strcmp(x(:,3),'a') & strcmp(x(:,4),'q'),:)
ans =
2×4 cell array
[1] [2] 'a' 'q'
[3] [4] 'a' 'q'
If data is on 3rd and 6th column, then use
x(strcmp(x(:,3),'a') & strcmp(x(:,6),'q'),:)
The above one gives output for complete columns.
ANKUR KUMAR
ANKUR KUMAR am 10 Okt. 2018
For more clarification, refer this,
x = { 1 2 'a' 6 8 'q' ; 2 3 'a' 2 5 'p'; 3 4 'a' 2 1 'q'; 5 6 'b' 1 2 'p' ; 7 8 'b' 1 1 'q' ;9 8 'b' 1 1 'q';}
x =
6×6 cell array
[1] [2] 'a' [6] [8] 'q'
[2] [3] 'a' [2] [5] 'p'
[3] [4] 'a' [2] [1] 'q'
[5] [6] 'b' [1] [2] 'p'
[7] [8] 'b' [1] [1] 'q'
[9] [8] 'b' [1] [1] 'q'
1)
x(strcmp(x(:,3),'a') & strcmp(x(:,6),'q'),:)
ans =
2×6 cell array
[1] [2] 'a' [6] [8] 'q'
[3] [4] 'a' [2] [1] 'q'
2)
x(strcmp(x(:,3),'a') & strcmp(x(:,6),'q'),[3,6])
ans =
2×2 cell array
'a' 'q'
'a' 'q'

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Characters and Strings finden Sie in Help Center und File Exchange

Produkte


Version

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by