フィルターのクリア

how extract table RowNames based on table elements

2 ビュー (過去 30 日間)
Yunwei
Yunwei 2023 年 2 月 22 日
回答済み: Steven Lord 2023 年 2 月 22 日
Hello all,
I have a table of only one colume with RowNames.
The table have numerical values and NaN.
I want to extract the RowNames of all of the NaN in the table. How can I do that?
Thanks in advance!

採用された回答

Voss
Voss 2023 年 2 月 22 日
% a table as you describe
t = table([1;NaN;3;4;NaN],'RowNames',{'A';'B';'C';'D';'E'})
t = 5×1 table
Var1 ____ A 1 B NaN C 3 D 4 E NaN
% extract RowNames of the NaN rows
nan_rows = t.Properties.RowNames(isnan(t{:,:}))
nan_rows = 2×1 cell array
{'B'} {'E'}

その他の回答 (1 件)

Steven Lord
Steven Lord 2023 年 2 月 22 日
I'd use ismissing, to avoid the need to extract the whole contents of the table into a separate array.
% a table as you describe
t = table([1;NaN;3;4;NaN],'RowNames',{'A';'B';'C';'D';'E'})
t = 5×1 table
Var1 ____ A 1 B NaN C 3 D 4 E NaN
% extract RowNames of the NaN rows
nan_rows = t.Properties.RowNames(ismissing(t))
nan_rows = 2×1 cell array
{'B'} {'E'}
This also works if t has variables of different types. Yes, I could have listed "elderberry" but I need a missing value for the example.
t.FruitNames = ["apple"; "banana"; "cherry"; "date"; missing]
t = 5×2 table
Var1 FruitNames ____ __________ A 1 "apple" B NaN "banana" C 3 "cherry" D 4 "date" E NaN <missing>
ismissing(t)
ans = 5×2 logical array
0 0 1 0 0 0 0 0 1 1
rowWithMissingNumberAndFruit = t.Properties.RowNames(all(ismissing(t), 2))
rowWithMissingNumberAndFruit = 1×1 cell array
{'E'}
rowWithMissingNumberOrFruit = t.Properties.RowNames(any(ismissing(t), 2))
rowWithMissingNumberOrFruit = 2×1 cell array
{'B'} {'E'}
The approach Voss posted wouldn't work here.
isnan(t{:,:})
Incorrect number or types of inputs or outputs for function 'isnan'.

カテゴリ

Help Center および File ExchangeTables についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by