Remove rows from table with a column match and an undefined categorical
6 views (last 30 days)
Show older comments
I want to remove all rows from my table T that have a (or multiple) duplicate entries in T.Name and have a value that is undefined in the categorical variable T.Result.
T.Value should be preserved regardless.
%create result array with undefined categoricals
result = [string(missing);"PASS";string(missing);string(missing);"FAIL";"PASS"];
result = categorical(result);
%crreate original table
T=table(["Bill";"Steve";"Joe";"Steve";"Bob";"Steve"],[1;2;3;2;5;2],result,'VariableNames',["Name","Value","Result"]);
T.Result=char(T.Result)
%The solution would eliminate row 4 beacuse "Steve" has a match and T.Result is undefined
%Rows 1 and 3 stay because T.Name does not have a match.
%Row 6 stays because T.Result is defined
solution=T([1:3 5:6],:)
0 Comments
Accepted Answer
Voss
on 24 Feb 2024
%create result array with undefined categoricals
result = [string(missing);"PASS";string(missing);string(missing);"FAIL";"PASS"];
result = categorical(result);
%crreate original table
T=table(["Bill";"Steve";"Joe";"Steve";"Bob";"Steve"],[1;2;3;2;5;2],result,'VariableNames',["Name","Value","Result"]);
T.Result=char(T.Result)
% logical index by row of whether Name appears more than once in the table:
name_repeated = sum(T.Name.' == T.Name, 2) > 1;
% logical index by row of whether Result is '<undefined>':
result_missing = strcmp(strtrim(cellstr(T.Result)),'<undefined>');
% if you were to keep T.Result as categorical, you could use this expression instead:
% result_missing = ismissing(T.Result);
% rows to remove:
remove_row = name_repeated & result_missing;
% remove the rows:
T(remove_row,:) = []
More Answers (0)
See Also
Categories
Find more on Categorical Arrays 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!