MATLAB Answers

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

138 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!
##### 3 CommentsShowHide 2 older comments
nskel on 12 Jun 2019
Yes, thanks! The second column contains integers.
Apologies!
... and yes that is the output I am looking for!

Sign in to comment.

### Answers (3)

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.
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

Stephen Cobeldick 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'  
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

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.
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Community Treasure Hunt

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

Start Hunting!