2016-04-16 15 views
0

Ich habe einen Datensatz, der aus 24 Datensätzen in zeitlicher Reihenfolge in aufeinanderfolgenden Zeilen besteht. Was ich habe diesen Code zu zeigen, wo die Indizes sind:Matlab Daten löschen, wenn der Prozentsatz NaN zu hoch ist

%Re calculate the batch indices due to deletion 
indbatch =1; 
for it=2:size(Data,1) 
    if Data(it,2)<Data(it-1,2) 
     indbatch=[indbatch,it]; 
    end 
end 
indbatch=[indbatch,it+1]; %gives the ind of start of each batch 

ich, wenn der Anteil der fehlenden Daten zu sehen versuche (NaN) Werte in jeder Charge zu hoch ist, um den Stapel zu löschen. Zur Vereinfachung werden die ersten Chargen aus den Reihen 1: 250 und dann die zweite Chargenreihe 251: 510. Also ich möchte wissen, wie man die Schleife zu berechnen, um den prozentualen Anteil von NaN in jeder Charge zu berechnen, wenn der Prozentsatz größer als 80% ist Batch-Nummer in Reihenfolge löschen Dies ist, was ich bisher habe, aber dies funktioniert nicht aufgrund der Ind Bit ich denke, und auch der Anteil Bit verwendet nur Länge und sollte Zeile * Länge verwenden ...

for ib=1:length(indbatch)-1  %each batch (24 batches) 
tspan=[indbatch(ib):indbatch(ib+1)-1]; % gives the time span of each batch 

for iv = 1:49 
    Ind = find(isnan(Data(tspan,iv))); 
    Check = isempty(Ind); 
    if Check == 1 
     continue 
    else 
     Percentage_Missing = (length(Ind)/ length(Data)) * 100; 
     if Percentage_Missing >= 80 
      Delete = [Delete, iv]; 
     else 
      continue 
     end 
    end 
end 
end 
+0

Willkommen bei SO. Können Sie uns einen [MCVE] (http://stackoverflow.com/help/mcve) geben, vor allem für einige Testdaten, um Ihr Problem besser zu verstehen. –

Antwort

0

Wenn Sie suchen Reihen entfernen Data, wo mehr als 80% der Werte NaN sind, können Sie kann dies mit einer logischen Matrixmanipulation tun.

%// Find all NaN values 
isMissing = isnan(Data(tSpan, :)); 

%// Compute the number of NaNs for each column of Data 
nMissing = sum(isMissing, 1); 

%// Compute this as a percentage 
percentMissing = nMissing ./ size(isMissing, 1); 

%// Now figure out which columns to remove 
toRemove = percentMissing >= 0.80; 

%// And use this to index into the data 
notMissingData = Data(tSpan, ~toRemove);