# How do I add an additional column to a cell array based on existing values in another column?

95 views (last 30 days)
nskel on 12 Jun 2019
Commented: nskel on 12 Jun 2019
I have a cell array (x) of dimensions 900x2. Column 1 is a unique identifier; there are two possible values of the second column, either "1" or "2". I want to add a third column which I want to be "1" if Column 2 is "1" and "0" otherwise.
I had previously asked a similar question where there were strings instead of numbers in Column 2 and a strcmp function was used but I would like to know similar function regarding numbers.
Any help appreciated!
nskel on 12 Jun 2019
Yes, thanks! The second column contains integers.
Apologies!
... and yes that is the output I am looking for!

Jan on 12 Jun 2019
Edited: Jan on 12 Jun 2019
x = {'asd', 1; ...
'bsd', 0};
x(:, 3) = num2cell(1 - cell2mat(x(:, 2)))
% or:
Value = {0, 1};
x(:, 3) = Value(2 - cell2mat(x(:, 2)))
This was one of the approaches for the char data:
Value = {'1', '0'};
x(:,3) = Value(2 - strcmp(x(:, 2), 'A'));
Here you can use the values to create the index instead of strcmp, but the equivalence is clear.

Stephen on 12 Jun 2019
>> x = {'x1',1';'x2',2;'x3',1}
x =
'x1' 
'x2' 
'x3' 
>> x(:,3) = {0};
>> x([x{:,2}]==1,3) = {1}
x =
'x1'  
'x2'  
'x3'  

Joel Handy on 12 Jun 2019
Edited: Joel Handy on 12 Jun 2019
Obviously replace myCellArray with whatever your array is called.
isTwo = cellfun(@(x) x == 2, myCellArray(:,2));
myCellArray(:,3) = num2cell(double(isTwo))
Alternatively
isTwo = [myCellArray{:,2}]' == 2;
myCellArray(:,3) = num2cell(double(isTwo));
I'm not sure which is faster off hand.