2016-09-27 6 views
0

Ich habe eine Tabelle von 356x81 in Matlab. Ich möchte Zeilen entfernen, wenn der Inhalt einer bestimmten 3 Variablen (von den 18 Variablen) NaN ist. Mit anderen Worten, wenn eine dieser 3 Variablen eine NaN hat, möchte ich diese Zeile gelöscht werden. Ich fand a good example on another group.Entfernen von Zeilen, wenn Nan in Matab

Nur weil meine Daten in einem Tabellenformat sind und ich Probleme mit isnan bekomme, verwende ich ismissing, die funktioniert, aber ich weiß nicht, wie man die 3 spezifischen Variablen auswählt. Gerade jetzt, wenn ich benutze:

B = mydata(~any(ismissing(mydata),2),:); 

Jede Zeile mit NaN entfernt wird.

Auch ich kann einfach nicht herausfinden, was die 2 ist. Ich habe es benutzt, weil es im Beispiel war, aber ich habe keine Ahnung, was es ist.

Vielen Dank im Voraus für jede Hilfe.

Antwort

0

Die 2 wird spezifiziert, dass, wenn eine beliebige der Werte in einer Zeile (die zweite Dimension) fehlen, dann wird es true zurückzukehren.

Sie können nur die Spalten auswählen, die Ihnen wichtig sind, indem Sie eine Zellenarray mit Variablennamen als Spaltenindex in die Tabelle verwenden. Dann können wir mit ismissing nach fehlenden Werten suchen und any verwenden, um festzustellen, ob einer von ihnen NaN ist.

toremove = any(ismissing(t(:, {'Var1', 'Var2', 'Var3'})), 2); 
subtable = t(~toremove,:); 

Oder wenn Sie alle drei wollen NaN sein, um für eine Reihe entfernt werden, können wir and anstelle

toremove = all(ismissing(t(:, {'Var1', 'Var2', 'Var3'})), 2); 
subtable = t(~toremove, :); 
+0

Danke eine Million - ich habe heute viel gelernt !!! – fatima55

0

Wenn Sie R2016b haben, oder sie aktualisieren können, sollten Sie check out the new rmmissing function:

x = rand(10,1); x(4) = NaN; 
y = rand(10,1); y(2) = NaN; 
z = rand(10,1); z(1) = NaN; 
T = table(rand(10,1), x, y, z); 
rmmissing(T, 'DataVariables', { 'x', 'y', 'z' }); 
+0

Wir hoffen auf ein Upgrade, also vielen Dank! – fatima55