strings comparison with if then in array

2 ビュー (過去 30 日間)
Ubu
Ubu 2012 年 7 月 12 日
Dear all,
Although I've already found a couple of posts on digits and strings together in cell arrays, I couldn't figure out how to explain my issue here.
I have a cell array alpha:
alpha = 383 x 8 cell
column 7 has strings ('miss' or 'incorrect'), the rest has integers.
I simply want to change the value in column 1 every time the correspondent value in column 7 has the label 'miss':
for x=1:383;
if alpha{x,7} == 'miss' | alpha{x,2} == 11; alpha{x,1} = 33; end
if ...
if ...
end
The error I get is:
??? Error using ==> eq MAtrix dimensions must agree
Is it referring to the fact that eq doesn't work for strings? I'm not so sure, because when I remove the for loop, and give a unique value to the x variable, then command works. Also, when I use the for loop, the x value in the Workspace shows the value 1, and not the requested 383. So I guess it is in the way I'm organizing the {} brackets.
I guess it's something silly I cannot see!
Any suggestions would be highly appreciated.
Sincerely,
Udiubu

採用された回答

Conrad
Conrad 2012 年 7 月 12 日
編集済み: Conrad 2012 年 7 月 12 日
Hi Udiubu, you can use strcmp:
strcmp(alpha(x,7),'miss')
You can also get rid of the for loop by using logical indexing; your first test will be
strcmp(alpha(:,7),'miss')|cell2mat(alpha(:,2))==11
so the for loop is replaced by
alpha(logical(strcmp(alpha(:,7),'miss')|cell2mat(alpha(:,2))==11),1) = {33};
  5 件のコメント
Ubu
Ubu 2012 年 7 月 12 日
Thanks to both of you! Real precious help.
Sincerely,
Udiubu
Jan
Jan 2012 年 7 月 12 日
There is no need to cast the logical output of STRCMP to a logical.

サインインしてコメントする。

その他の回答 (1 件)

Ubu
Ubu 2012 年 7 月 12 日
Hi Conrad,
This is "almost" great!
As you can see for my previous post - I forgot to mention it in words - is that two conditions have to be meet on order to substitute thr value in column 1:
conditions are:
- I have a 'miss' in column 7 - I have the value 11 in column 2
Your last command seems to do so, it finds the "miss" values and subsitute the value in column 1, but regardless of the value in column 2 (the 11 value).
Is it correct to use "|" to satisfy both commands? Here the second condition in the if loop doensn't work.
Any additional hint would be great.
Now I also understood how logical works!
Thanks!
Udiubu

カテゴリ

Help Center および File ExchangeNumeric Types についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by