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

5 vues (au cours des 30 derniers jours)
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 commentaires
Guillaume
Guillaume le 18 Déc 2015
Also, don't put questions in the title, particularly if it is a different question than in the body.
Both the cyclist and I answer your question in the body (remove any row which has missing value). The answer to remove any row that has more than x missing values is completely different
Dhruv Ghulati
Dhruv Ghulati le 18 Déc 2015
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.

Connectez-vous pour commenter.

Réponse acceptée

the cyclist
the cyclist le 18 Déc 2015
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, :);

Plus de réponses (1)

Guillaume
Guillaume le 18 Déc 2015
Modifié(e) : Guillaume le 18 Déc 2015
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, :);

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by