Filter contents of a table
10 views (last 30 days)
Show older comments
Deepa Maheshvare
on 24 Nov 2019
Commented: Deepa Maheshvare
on 24 Nov 2019
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?
0 Comments
Accepted Answer
Guillaume
on 24 Nov 2019
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)
4 Comments
More Answers (0)
See Also
Categories
Find more on Data Type Identification in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!