Info
This question is closed. Reopen it to edit or answer.
I have a column cell array "teste1" and I want to create "teste2": if "teste1" is not 0, I want a 'V'; if "teste1" is 0, I want to compare 2 other different string cells and the result would be from 1 to 5 (or 0, if no condition was satisfied)
1 view (last 30 days)
Show older comments
How can I proceed? I tried like this but "Undefined operator '~=' for input arguments of type 'cell'" :
teste2 = teste1;
if teste2(:)~=0
teste2(:)='V';
elseif teste2(:) == 0
mask = strcmp(catracio1, 'low') & strcmp(catpreco, 'low');
teste2(mask) = {'1'};
mask = strcmp(catracio1, 'medium low') & strcmp(catpreco, 'medium low');
teste2(mask) = {'2'};
mask = strcmp(catracio1, 'medium') & strcmp(catpreco, 'medium');
teste2(mask) = {'3'};
mask = strcmp(catracio1, 'medium high') & strcmp(catpreco, 'medium high');
teste2(mask) = {'4'};
mask = strcmp(catracio1, 'high') & strcmp(catpreco, 'high');
teste2(mask) = {'5'};
else
teste2(:)=0;
end
1 Comment
Walter Roberson
on 26 Oct 2016
Duplicate of earlier http://www.mathworks.com/matlabcentral/answers/308996-i-have-a-6266x1-cell-teste1-and-i-want-to-create-teste2 . As that one did not have an Answer (it was waiting for response to a Comment), that one has been closed and the Comment moved here.
Answers (2)
xiexiezaijian
on 26 Oct 2016
I think the problem is in these lines:
if teste2(:)~=0
teste2(:)='V';
but I get really confused about what you want to do:
1. isempty(teste2);%determine whether teste2 is empty
2. teste2{1} ~= 0;%determine whether the first cell element of teste2 is zero
I hope this will help;
3 Comments
xiexiezaijian
on 26 Oct 2016
Sorry, I don't understand some variables(catracio1, catpreco) in your code; I guess you want change value of some cell elements to 'V' '1', '2', '3', '4' or '5'; Maybe you could get idea from the example below;
a = cell(1,9);
a(cellfun(@(x) ~isequal(x,0),a)) = {'V'}
maybe you should replace 'isequal' to 'strcmp'.
Walter Roberson
on 26 Oct 2016
You need to answer the questions I asked you in your earlier post of the same question:
What are you data structures here? Is it that case that for every teste1 entry, teste1(K), that there is a corresponding catricio1{K} and corresponding catpreco{K} entry? And is it correct that for the locations where test1(K) is 0, you want to compare the two corresponding string entries and if they are equal then you want to assign a character corresponding to the class number to teste2{K} ? And is it the case that if the two strings are not equal, or the two strings are something other than one of those 5, that you want to assign '0' to teste2{K} ? But where test1(K) was non-zero you want to assign 'V' to teste2{K} ?
7 Comments
Walter Roberson
on 27 Oct 2016
When teste1(K) is 0, catpreco{K} needs to be examined, but which entry in catracio1 needs to be examined then? You say here that catracio1{K} does not correspond to catpreco{K} so I do not know which entry in catracio1 to look at .
When I say "corresponds", I do not mean "is caused by", just that there the positions match up. For example when looking at catpreco{K}, you would not be wanting to look to see if there is any entry in catracio1 that matches, you probably only want to look at one particular one, but here you say that it would not be the K'th entry.
This question is closed.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!