Filter Table with Generalized Values
3 views (last 30 days)
Show older comments
I have the following table say t =
Id Age Gender Country
-- ----- --------- ---------
1 10 M US
2 20 F CA
3 20 F US
4 10 M CA
5 10 M CA
I have another array say col_name with values { Age = 20, Gender = F }
Values of col_name change .. for example col_name = { Age = 10, Gender = M, Country = CA }
or col_name = { Age = 10 }
My goal is to write a genealized function such that when i pass col_name ( whatever be its value ) it should be able to get me a filtered set from t
Is there an function for t that can help me get the filtered result set if I passed col_name ?
ex = t.<some_filter_function>( col_name = { Age = 20, Gender = F } )
should give me
Id Age Gender Country
-- ----- --------- ---------
2 20 F CA
3 20 F US
0 Comments
Accepted Answer
Geoff Hayes
on 29 Jun 2020
Neeraj - how about trying something like
filteredTable = t(t.Age == 20 & strcmp(t.Gender, 'F'), :)
or are you hoping for something a little more general?
3 Comments
Geoff Hayes
on 29 Jun 2020
Well you could create a function that might do this for you:
function [myTable] = filterTable(myTable, filterObj)
filterNames = fields(filterObj);
for k = 1:length(filterNames)
filterName = filterNames{k};
tableVariables = myTable.Properties.VariableNames;
if ismember(filterNames{k}, tableVariables)
filterValue = getfield(filterObj, filterName);
if ischar(filterValue)
myTable = myTable(strcmp(myTable.(filterName),filterValue), :);
elseif isnumeric(filterValue)
myTable = myTable(myTable.(filterName) == filterValue, :);
else
fprintf('Unhandled filter for %s.\n', filterName);
end
end
end
And then you would create a filter object and call this function like
filterObj.Age = 20;
filterObj.Gender = 'F';
filteredTable = filterTable(t, filterObj);
More Answers (0)
See Also
Categories
Find more on Creating and Concatenating Matrices 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!