Filter Table with Generalized Values
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Geoff Hayes
2020-6-29
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 个评论
Geoff Hayes
2020-6-29
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);
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!