Can't get all the rows in my table that have any missing values and remove those rows

7 ビュー (過去 30 日間)
Hi there,
I am trying to remove my table (of a combination of double, cell arrays and duration arrays) of any rows which have missing values. For example, a subset of the table is:
'' '' '441' '0'
'' '' '5' '0'
'No' '' '2889' '0'
'No' 'Clicks' '2894' '0'
'' '' '' '0'
'' '' '5' '0'
'No' 'ROD' '3591' '1'
'' '' '' '0'
I tried this link.
My code is:
badRows = ismissing(finalnbs);
T = finalnbs(~badRows, :);
However, this results in an error:
Row index exceeds table dimensions.
What am I doing wrong, and what code do I need to achieve my need?
  4 件のコメント
Dhruv Ghulati
Dhruv Ghulati 2015 年 12 月 18 日
Apologies, you are right, here the question in the title doesn't match the question in the body given. For the sake of other readers I am amending the title.

サインインしてコメントする。

採用された回答

the cyclist
the cyclist 2015 年 12 月 18 日
This should solve it for you:
A = {
'' '' '441' '0';
'' '' '5' '0';
'No' '' '2889' '0';
'No' 'Clicks' '2894' '0';
'' '' '' '0';
'' '' '5' '0';
'No' 'ROD' '3591' '1';
'' '' '' '0'};
T = cell2table(A)
badEntry = ismissing(T);
badRow = any(badEntry,2)
T = T(~badRow, :);

その他の回答 (1 件)

Guillaume
Guillaume 2015 年 12 月 18 日
編集済み: Guillaume 2015 年 12 月 18 日
badRows is an m*n logical array, where m is the number of rows and n the number of columns of your table. So it has m*n elements. You're then using that as a row index into your table, so of course, matlab can't fit m*n values into m values.
To fix this, use the any (or all) function:
T = finalnbs(~any(badrows, 2), :);
%or
T = finalnbs(all(~badrows, 2), :);
P.S.: this answer your question on how to remove any row which has missing value. If you want to remove rows have more than x missing values, then you use sum instead:
T = finalnbs(sum(badrows, 2) <= x, :);

Community Treasure Hunt

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

Start Hunting!

Translated by