Remove rows from table with a column match and an undefined categorical
조회 수: 7 (최근 30일)
이전 댓글 표시
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
채택된 답변
Voss
2024년 2월 24일
%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,:) = []
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Categorical Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!