How to read in, compare and then delete data from a cellarray?

2 vues (au cours des 30 derniers jours)
J
J le 3 Sep 2015
Commenté : Star Strider le 4 Sep 2015
Hi,
How do I filter cellarray A to only return the unique values (i.e. in this example A319, A320, A321) once, then compare these unique values against a structure, B, removing any rows from B which do not contain the unique values from A? Example below:
I'm looking for a general solution as the values contained in A can change. Structure B will not change but I have reduced the size of it for example purposes only.
>> A
A =
'A319'
'A319'
'A320'
'A320'
'A319'
'A320'
'A321'
'A320'
B = 'A306' 'A300B4-' 'non-metric' 'jet'
'A30B' 'A300B4-' 'non-metric' 'jet'
'A310' 'A310-20' 'non-metric' 'jet'
'A319' 'A319-13' 'non-metric' 'jet'
'A320' 'A320-21' 'non-metric' 'jet'
'A321' 'A321' 'non-metric' 'jet'
'A332' 'A330-24' 'non-metric' 'jet'
'A333' 'A330-30' 'non-metric' 'jet'
so B should return...
'A319' 'A319-13' 'non-metric' 'jet'
'A320' 'A320-21' 'non-metric' 'jet'
'A321' 'A321' 'non-metric' 'jet'
There are more columns (fields) in B, 101x15 to be exact.

Réponse acceptée

Star Strider
Star Strider le 3 Sep 2015
Assuming that ‘A’ is an (8x1) cell and ‘B’ is a (8x4) cell, this will work for this example. This appears to be robust, since ismember returns all matches:
Lia = ismember(B(:,1), A);
C = B(Lia,:);
  2 commentaires
J
J le 4 Sep 2015
Modifié(e) : J le 4 Sep 2015
Fantastic! The only thing I've changed is to make it work for a structure instead of a cellarray (as B is a structure)
Lia = ismember(B(:,1), A);
B = B(Lia);
Star Strider
Star Strider le 4 Sep 2015
Thank you. (I didn’t know it was a structure.)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Dimensionality Reduction and Feature Extraction dans Help Center et File Exchange

Tags

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by