How to filter data from table using multiple strings

13 Ansichten (letzte 30 Tage)
André Kanji
André Kanji am 8 Mai 2017
Kommentiert: Peter Perkins am 9 Mai 2017
I have a table(60000 by 20) in which one of the columns have the following codes(extracted data):
c={'EGGD';'CSED';'CSED';'CSED';'CSED';'AVVT';'LBEB';'EGGD';'LBEB'}
And I just want the data that correspond to 'CSED' and 'AVVT'(example), there are many more.
One of my solutions:
cell=table2cell(table)
rowsCSED=any(strcmp(cell,'CSED'),2);
rowsAVVT=any(strcmp(cell,'AVVT'),2);
rows=rowsCSED | rowsAVVT;
table(rows,:)
Is there any way to do this without reverting to a loop?

Akzeptierte Antwort

dpb
dpb am 8 Mai 2017
Bearbeitet: dpb am 8 Mai 2017
>> t=table(categorical(c),'variablenames',{'Code'}); % put your data back into the table from whence it came
>> summary(t)
Variables:
Code: 9x1 categorical
Values:
AVVT 1
CSED 4
EGGD 2
LBEB 2
>> t(ismember(t.Code,{'CSED','AVVT'}),:) % look up the matching rows...
ans =
Code
____
CSED
CSED
CSED
CSED
AVVT
>>
NB: Such things work much better if you make the codings categorical variables rather than leaving as string data.
  1 Kommentar
Peter Perkins
Peter Perkins am 9 Mai 2017
Using categorical becomes especially readable in the simpler case of finding only one category:
t(t.Code == 'CSED',:)
With two categories, you could use
t(t.Code=='CSED' | t.code =='AVVT',:)
but at some point, you're better off with ismember.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Tables 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!

Translated by