2016-10-02 7 views
-1

Ich möchte eine Sub-Matrix x7992 basierend auf Bedingungen von bestimmten Spalten der ursprünglichen data Matrix auswählen. Insbesondere ist die ursprüngliche Matrix 23166-by-9, einen ursprünglichen Code Gauss folgenExtrahieren Sub-Matrix basierend auf Bedingungen bestimmter Spalten in Matlab

x7992 =selif(data,data[.,col_coh].==0 .and data[.,col_year].<=1992); 

I dies in Matlab Umschreiben mit

x7992 = data(data(:,col_coh)==0 & data(:,col_year)<=1992); 

col_coh,col_year sind vordefinierte Spaltennummer.

Aber anstatt mir eine Untermatrix zu geben, gibt mir die obige Codezeile nur eine einzige Zeile (23166-by-1), es ist nicht das, was ich will (und nicht das wirkliche Ergebnis auf dieser Bedingung) .So, wie man es repariert? Danke.

--- ----- Update-

Die data Matrix ist wie (I andere Spalten auslassen, weil nur die ersten 3 Spalten relevant Auswahl sind), die erste Spalte ID für Einzelpersonen

1 1979 0 
1 1980 0 
1 1981 1 
1 1982 0 
1 1983 1 
2 1990 0 
2 1991 0 
2 1992 0 
2 1993 1 
3 1985 0 
3 1986 0 
3 1987 0 
ist

Basierend auf den Bedingungen, was ich will, ist eine Submatrix aus Daten, die die Zeilen mit Wert> 1992 in der zweiten Spalte und Wert = 1 in der dritten Spalte ausschließt

+0

ein Beispiel 'Gib data' Matrix und die erwartete Ausgabe –

+0

Hallo, @ Sardar_Usama, füge ich noch einige weitere Details meiner Daten – zlqs1985

Antwort

0

Basierend auf dem Beispiel, das Sie gegeben haben, die Folgendes wird dies tun:

data(data(:,2)<=1992 & data(:,3)~=1,:) 

, die diese Ausgabe gibt:

 1 1979 0 
     1 1980 0 
     1 1982 0 
     2 1990 0 
     2 1991 0 
     2 1992 0 
     3 1985 0 
     3 1986 0 
     3 1987 0 
0

erhalten Sie nur einen einzigen Spaltenvektor als Ausgangs da Ihr Zustand Vektor wird als einzelnes 23166x1 Vektor zurückgegeben.

Um die gesamte Reihe von Werten zu erhalten, müssen Sie ein colon als zweites Argument hinzufügen. Ich habe das Beispiel in zwei Zeilen aufgeteilt, um lesbarer zu machen.

condIdx = data(:,col_coh)==0 & data(:,col_year)<=1992; 
x7992 = data(condIdx, :); 

Wenn Sie bestimmte Spalten in der Ergebnismatrix wollen, setzen Sie einfach die Spaltennummer in einem Vektor anstelle des Doppelpunkt-Operator.

colsInResult = [1 2 3]; 
x7992 = data(condIdx, colsInResult); 
Verwandte Themen