How to extract column information of a mix cell array! - Please Help :(

1 vue (au cours des 30 derniers jours)
Wilson Weng
Wilson Weng le 2 Sep 2017
Commenté : Wilson Weng le 14 Sep 2017
Hi the wonderful MatLab community!
Im very new to MatLab and urgently require some assistance please!
I have a cell array
C=
1 '100'
2 '200'
3 '200'
4 '100'
5 '200'
...etc
The cell array changes will always have the two columns but will have random number of rows. The first column will always start from 1 and increase in sequential order moving down the cell array. The second column will only have numbers of either '100' or '200'.
How do you convert array of C such that C(:,2) == 200; basically outcome of array D to be:
D=
2
3
5
...etc

Réponse acceptée

Henry Giddens
Henry Giddens le 2 Sep 2017
Hi,
In this example, all of your '100' and 200' values are strings, so you need to identify the cells in the second column of your cell array which have the string value of 200.
The following line of code does this, and also groups the output into an array of numerical values (rather than a cell array).
D = [C{strcmp(C(:,2),'200'),1}]'
  3 commentaires
Henry Giddens
Henry Giddens le 5 Sep 2017
Modifié(e) : Henry Giddens le 5 Sep 2017
If I have understood this correctly:
The above answer should give you all the entries in the cell array with only '200' in the middle column edited slightly because you are also interested in the final column now:
indx = C{strcmp(C(:,2),'200');
C2 = C(indx,:);
Now loop through the third column, and see if the same number appears in the firstcolumn:
indx2 = false(length(C2),1);
for i = 1:length(C2);
if ismember(C2{i,3},[C2{:,1}]);
indx2(i) = true;
end;
end
% select the rows from C2 that have been identified as meeting the criteria
% and convert to numerical array:
D = cell2mat([C2(indx2,1),C2(indx2,3)])
D =
4 1
7 4
Wilson Weng
Wilson Weng le 14 Sep 2017
Apologies for the delay in response but thank you so much! :)

Connectez-vous pour commenter.

Plus de réponses (1)

Andrei Bobrov
Andrei Bobrov le 2 Sep 2017
cat(1,C{ismember(C(:,2),'200'),1})
  1 commentaire
Wilson Weng
Wilson Weng le 3 Sep 2017
Modifié(e) : Wilson Weng le 3 Sep 2017
Thank you so much for your answer as well champ :)
I do have one more question (sorry to be of a hassle)
How would you code the condition where the new cell array
C=
1 '200' NaN (are NaN's as no object are in next to 1, 2 and 3)
2 '100' NaN
3 '200' NaN
4 '200' 1
5 '100' 2
6 '100' 3
7 '200' 4
8 '200' 5
9 '200' 6
10 '100' 7
11 '100' 8
12 '100' 9
... etc
The array will always be a set number of 3 columns but random number of rows. The NaN's on the third column can just be ignored (assumed zeros)
Essentially the way the array works is this:
  • The first column is the number of a specific object.
  • The second column is in reference to only the first column; and is the string 'label' to the specific objects adjacent in the first column . eg looking at column 1; 1 is a '200', 2 is a '100', 3 is a '200' etc.
  • The third column is the specified numbered object which is independent to column 1 but the referencing of this column uses column 1.
  • for example looking at the 4th row of cell array C; for object number 4 (first column) it is a '200' (from reference column 1 and 2 - row 1), the object for number 1 (third column) is also a '200' (from reference column 1 and 2 -row 1).
  • Another example look at row 11: object number 11 (column 1) is a '100' and object number 8 (column 3) is a '200'. Column 3 is a '200' from using the reference columns 1 and 2.
How would you code it such that the condition is true for both columns 1 and 3 of a specific row:
  • the object number (column 1) is a '200' AND the object number (column 3) when referenced using column 1 and 2 is a '200' as well.
with an output in the form of a numerical vector values so that I can use a for loop to make changes to the objects that are true to both the conditions above.
Example of Output cell array which meets the conditions:
D=
4 7 ... etc
I understand this is quite a complex condition and would really really really appreciate some help on this as I'm about to go crazy from spending all day on this.. :(
Kind Regards, Wilson.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by