MATLAB: Filter contents of a table

groupMATLABtable

The following contents are stored in a table, in variable 'tbl',
Multico value
______________
{'1'} {'2'} 1
{'2'} {'3'} 2
{'3'} {'4'} 1
{'4'} {'5'} 2
I would like to do the following,
variable = 2,
If the variable is present in tbl.Multico, I would like to retain only those rows and delete the remining rows.
Example,
Multico value
______________
{'1'} {'2'} 1
{'2'} {'3'} 2
Also, if variable is present in column 2 of Multico, the value in column 2 of tbl will remain unchanged. If the variable is
in column 1 of Multico the sign of the value in column2 of tbl will change.
Th expected output is,
Multico value
______________
{'1'} {'2'} 1
{'2'} {'3'} -2
I'd like to ask for suggstions on how this can be done.
Is there a function similar to python's groupby for filtering contents of a table?

Best Answer

Any reason why Multico is a cell array? If all the cells are just scalar, then it's a waste of memory and complicates the code for no good reason.
So first step, convert that cell array into a 2 column matrix:
yourtable.Multico = cell2mat(yourtable.Multico);
Your filtering is then trivially done:
serchval = 2;
newtable = yourtable(any(yourtable.Multico == searchval, 2), :)
If you then want to change the sign of value when searchval is in first column of Multico:
tochange = newtable.Multico(1, :) == searchval;
newtable.value(tochange) = -newtable.value(tochange)
Related Question