Hello. Could anyone tell me how to fix the for-loop code?
>>
b = {'Hello world'; 'Good morning';'Good afternoon';'6 years';'10+ years';'<1 year'}
z=array2table(b,'VariableNames', {'var1'})
for i=1:length(z)
if z(i,1)='Hello world'; z(i,1)=1;
else z(i,1)=0;
end
end
Output:
b =
6×1 cell array
{'Hello world' }
{'Good morning' }
{'Good afternoon'}
{'6 years' }
{'10+ years' }
{'<1 year' }
z =
6×1 table
var1
__________________
{'Hello world' }
{'Good morning' }
{'Good afternoon'}
{'6 years' }
{'10+ years' }
{'<1 year' }
if z(i,1)='Hello world'; z(i,1)=1;
Incorrect use of '=' operator. Assign a value to a variable using '=' and compare values for equality using '=='.

 采纳的回答

Do exactly this:
compare values for equality using '=='
However the actual solution is likely the strcmp (or related strcmpi) function.
Try this:
b = {'Hello world'; 'Good morning';'Good afternoon';'6 years';'10+ years';'<1 year'}
z=array2table(b,'VariableNames', {'var1'})
for i=1:height(z)
if strcmp(z{i,1}, 'Hello world'); z{i,1}={1};
else z{i,1} = {0};
end
end
Indexing correctly (here using curly braces {}) is important.

2 个评论

Star Strider, Thank you for pointing strcmp to me - it is very useful. Code that you suggest works after a slight adjustment. Thank you.
b = {'Hello world'; 'Good morning';'Good afternoon';'6 years';'10+ years';'<1 year'}
z=array2table(b,'VariableNames', {'var1'})
for i=1:height(z)
if strcmp(z{i,1}, 'Hello world')==1; z{i,1}={1};
else z{i,1} = {0};
end
end
My pleasure!

请先登录,再进行评论。

更多回答(1 个)

DGM
DGM 2021-4-23
编辑:DGM 2021-4-23
You need to use == for equality tests, not =. That said, don't try testing character arrays for equality that way either. Unless they have the same number of characters, you'll have problems. Use strcmp(), strcmpi(), or ismember().
b = {'Hello world'; 'Good morning';'Good afternoon';'6 years';'10+ years';'<1 year';'0'}
z=array2table(b,'VariableNames', {'var1'})
for i=1:height(z) % use height/width/size/numel, not length
if strcmp(z{i,'var1'},'Hello world'); % use curly braces for indexing here. you can either use column number or name
z{i,'var1'}={'1'}; % i'm assuming that elements of a table column should share the same datatype
elseif strcmp(z{i,'var1'},'0'); % if there's a condition, use elseif instead of else
z{i,'var1'}={'something else'};
else
% do something else
end
end
z % see what changed
gives
z =
var1
________________
'Hello world'
'Good morning'
'Good afternoon'
'6 years'
'10+ years'
'<1 year'
'0'
z =
var1
________________
'1'
'Good morning'
'Good afternoon'
'6 years'
'10+ years'
'<1 year'
'something else'
I added an extra element to your list so that the second case was demonstrated.

4 个评论

Dear DGM, Thank you for your reply. Do you if it matters if I use {'1'} vs {1} in ie.,
{i,'var1'}={'1'} vs {i,'var1'}={'1'} ?
Whihc option will make sure that the cell entry is a number?
if you use {1}, you're inserting a numeric value. If you use {'1'}, you're inserting a string. As I mentioned in the comments, a column in a table typically contains data of one type. There's nothing stopping you from mixing datatypes though. It all depends on what you want to do.
Dear, DGM. I understand. I want it to look like this., but Instead I get something like this
i need it to ne numerical so I can run the regression.

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Matrix Indexing 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by