Nach Zeilen filtern, Spalten stapeln?Ich weiß, wie man eine Teilmengen-Tabelle basierend auf einigen Kriterien erstellt:
dt << Row Selection( Select where( (:Stat == "mean"), Current Selection( Extend )) );
dt << Select Columns( [10, 20] );
dt2 << Subset( Output Table( "test"), Selected Rows( 1 ), Selected columns( 1 ) );
Aber jetzt muss ich das Obige für mehrere Kriterien wiederholen und die Auswahl stapeln, dh die neue Tabelle hat Spalte 10 als feste Spalte, und dann füge ich weiterhin Spalte 20 hinzu, wobei nur die Zeilen den obigen Kriterien entsprechen. Die Anzahl der Zeilen ist immer gleich.
Der Befehl "Stapeln" funktioniert nicht mit der Auswahl. Sind Sie sich nicht sicher, welche anderen Befehle dies tun können?
SkriptingBetreff: Nach Zeile filtern, Spalten stapeln?Hier ist ein Beispiel für eine einfache Möglichkeit, die ausgewählten Zeilen bei Verwendung der Stapelplattform zu löschen
names default to here(1);
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Row Selection( Select where( (:Sex=="F"), Current Selection( "Extend" )) );
// Stack data table
dtStack = dt << Stack(
columns( :height, :weight ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << delete rows;
Betreff: Nach Zeile filtern, Spalten stapeln?(Drücken Sie versehentlich als Lösung akzeptieren)
Danke, aber ich möchte ausgewählte Zeilen nicht löschen. Ich kann mich darum kümmern, aber wie würde ich die Auswahl anhängen, wenn ich Stack verwende?Betreff: Nach Zeile filtern, Spalten stapeln?Hier ist, wie ich dachte, dass es getan werden kann (aber es funktioniert nicht):
my_list = {"F0","F1"};
stackcols = {};
For( i = 1, i <= N Items( my_list ), i++,
dt << Row Selection( Select where( (:Freq==my_list[i]), Current Selection( "Extend" )) );
dt << Select Columns( [19] );
Insert Into( stackcols, dt )
);
dt2 << Subset( Output Table( "aa"), Selected Rows( 1 ), Selected columns( 1 ) );Grundsätzlich filtere ich die aktive Tabelle nach Spalte "Freq", zuerst nach dem Wert "F0" und dann nach "F1". Dies befindet sich in Spalte 19. Ich füge diese Auswahl der Auswahlliste 'stackcols' hinzu. Nach der Schleife erwarte ich also eine zweispaltige Liste. Dann möchte ich einen Tisch daraus machen ("aa" genannt). Aber es funktioniert nicht.
Betreff: Nach Zeile filtern, Spalten stapeln?Ah ..... Sie haben Recht, wenn Sie die ausgewählten Zeilen löschen.Aber um das nicht ausgewählte zu löschen, verwenden Sie einfach
dtStack << Invert Row Selection;
und löschen Sie dann die Zeilen.
So fügen Sie einfach mehrere unabhängige gestapelte Datentabellen hinzu:
- Erstellen Sie vor dem Starten der sich wiederholenden Stapelinstanzen eine leere Basisdatentabelle, an die alle gestapelten Tabellen angehängt werden
dtBase = New Table("Base");
- Dann für jede der gestapelten Tabellen, die Sie erstellen,
- Löschen Sie die nicht gewünschten Zeilen aus der gestapelten Datentabelle
- Verketten Sie die gestapelte Tabelle mit der Basistabelle
dtBase << Concatenate( dtStacked );
- Löschen Sie die gestapelte Tabelle
Close( dtStacked, nosave );
Betreff: Nach Zeile filtern, Spalten stapeln?Danke, aber es hat nicht funktioniert:
dt = current data table();
my_list = {"F0","F1"};
dtBase = New Table("Base");
dtStacked = {};
For( i = 1, i <= N Items( my_list ), i++,
dt << Row Selection( Select where( (:Freq==my_list[i]), Current Selection( "Extend" )) );
dt << Select Columns( [19] );
Insert Into( dtStacked, dt );
dtBase << Concatenate( dtStacked );
Close( dtStacked, nosave );
);dtBase ist leer.
Re: Nach Zeile filtern, Spalten stapeln?Einfügen in() tut nicht das, was du denkst.
In Ihrem Code würde es die Datentabellenreferenz dt wiederholt in die dtstacked-Liste einfügen. Es hat nichts mit den ausgewählten Zeilen oder Spalten zu tun.
Sie müssen mit Subset() eine neue Datentabelle der ausgewählten Zeilen und Spalten erstellen und diese Referenz in dtstacked einfügen und sie dann verketten.
Allerdings scheint das nicht nötig zu sein. Da Sie die Auswahl nur jedes Mal durch die Schleife ganz am Ende erweitern, können Sie eine Teilmenge der ausgewählten Zeilen und Spalten erstellen und das gleiche Ergebnis wie Ihre verkettete Datentabelle erhalten.