Nach Zeile filtern, Spalten stapeln?Ich weiß, wie man anhand einiger Kriterien eine Teilmengentabelle 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 wird Spalte 10 als feste Spalte haben, und dann füge ich weiterhin Spalte 20 hinzu, wobei nur die Zeilen den oben genannten Kriterien entsprechen. Die Anzahl der Zeilen bleibt immer gleich.
Der Befehl „Stack“ funktioniert nicht mit der Auswahl. Ich bin mir also nicht sicher, welche anderen Befehle das können?
Datenmischung und -bereinigungBetreff: Nach Zeile filtern, Spalten stapeln?Genau das wollte ich, nochmals vielen Dank!
Betreff: Nach Zeile filtern, Spalten stapeln?Wenn Sie noch einmal darüber nachdenken, was meiner Meinung nach Ihr gewünschtes Ergebnis am Final Table ist, schlage ich vor, dass Sie einen Blick darauf werfen
Tabellen=>Geteilt
Das folgende Beispiel teilt die Spalte nach der Spalte „:Geschlecht“ auf, es wäre Ihre Spalte „:Häufigkeit“, und die geteilten Spalten sind „Größe“ und „Gewicht“, also Ihre Spalten „15“ und „19“.
Die Ausgabe erstellt Spaltenpaare für jeden der Spaltenwerte „Teilen nach“.
Names Default To Here( 1 );
dt = open("$SAMPLE_DATA\big class.jmp");
// Split data table
// → Data Table( "Untitled 66" )
Data Table( "big class" ) << Split(
Split By( :Sex ),
Split( :height, :weight ),
Remaining Columns( Drop All ),
Sort by Column Property
);

Betreff: Nach Zeile filtern, Spalten stapeln?Danke, das war richtig! Es bleibt nur noch, wie man es in eine for-Schleife einfügt. Hier ist mein Test:
For(i=1, i<=NItems(freq_list), i++,
dt << clear select;
dt << Row Selection( Select where( (:Freq == (freq_list[i])), Current Selection( Extend )) );
dt << Select Columns( [15,19] );
dt << Subset( ( Selected Columns ), Output Table Name( freq_list[i] ) );
);
Dadurch entstehen jedoch zwei identische Tabellen, obwohl ich die Auswahl zu Beginn jeder Schleife lösche.
Betreff: Nach Zeile filtern, Spalten stapeln?Ich vermute, dass das Problem darin besteht, dass die Spalten in beiden Tabellen dieselben Namen haben.Daher überschreibt JMP die Werte.Hier ist ein einfaches Beispiel, wie ich damit umgehen würde.Bei dieser Art von Aktualisierung werden nun die beiden Datentabellen in einer Reihe angeordnet, Zeile 1 mit Zeile 1.
Dies kann dazu führen, dass Sie keine spaltenübergreifenden Vergleiche durchführen können, da keine Beziehung zwischen ihnen besteht.
dt << Row Selection( Select where( (:Freq == "F0"), Current Selection( Extend )) );
dt << Select Columns( [15,19] );
dt2 = dt << Subset( ( Selected Columns ), Output Table Name( "F0" ) );
dt << clear select;
dt << Row Selection( Select where( (:Freq == "F1"), Current Selection( Extend )) );
dt << Select Columns( [15,19] );
dt3 = dt << Subset( ( Selected Columns ), Output Table Name( "F1" ) );
// Rename the columns
column(dt3,1) <<SET name=""></SET>
Betreff: Nach Zeile filtern, Spalten stapeln?Ich entschuldige mich für die vielen Beiträge. Ich stecke immer noch fest. Im Moment habe ich nur dieses Skript, das zwei Tabellen mit jeweils einer Spalte ergibt, die mich interessiert. Ich kann eine Spalte manuell von Tabelle 1 in Tabelle 2 kopieren und einfügen, aber nicht automatisch.
dt << Row Selection( Select where( (:Freq == "F0"), Current Selection( Extend )) );
dt << Select Columns( [15,19] );
dt << Subset( ( Selected Columns ), Output Table Name( "F0" ) );
dt << clear select;
dt << Row Selection( Select where( (:Freq == "F1"), Current Selection( Extend )) );
dt << Select Columns( [15,19] );
dt << Subset( ( Selected Columns ), Output Table Name( "F1" ) );
Betreff: Nach Zeile filtern, Spalten stapeln?Nein, der obige Code ist immer noch verkettet. Ich werde es mit dem Befehl „Aktualisieren“ versuchen.
Betreff: Nach Zeile filtern, Spalten stapeln?Hier ist ein Code, der manuell zu funktionieren scheint. Jetzt werde ich versuchen, es in einer Schleife zu machen:
dt << Row Selection( Select where( (:Stat == "selection1"), Current Selection( Extend )) );
dt << Select Columns( [15, 19] );
dt << Row Selection( Select where( (:Stat == "selection2"), Current Selection( Extend )) );
dt << Select Columns( [15, 19] );
dt << Subset( ( Selected Columns ), Output Table Name( "Subset_1_2" ) );
Betreff: Nach Zeile filtern, Spalten stapeln?Um nicht zu verketten, sondern neue Spalten hinzuzufügen, verwenden Sie einfach die Update-Plattform.
Betreff: Nach Zeile filtern, Spalten stapeln?Danke, das ist fast das, was ich will, außer dass ich sie gestapelt (spaltenweise) statt verkettet (zeilenweise) benötige. Das heißt, wenn die Auswahlspalte L lang ist, möchte ich, dass meine neue Tabelle die gleiche Anzahl von Zeilen, aber zwei Spalten hat (nicht eine Spalte mit der doppelten Länge).Betreff: Nach Zeile filtern, Spalten stapeln?Einfügen in() tut nicht das, was Sie denken.
In Ihrem Code würde die Datentabellenreferenz dt wiederholt in die dtstacked-Liste eingefügt. 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, diese Referenz in dtstacked einfügen und sie dann verketten.
Allerdings scheint das nicht notwendig zu sein. Da Sie die Auswahl jedes Mal durch die Schleife ganz am Ende erweitern, könnten Sie eine Teilmenge der ausgewählten Zeilen und Spalten erstellen und das gleiche Ergebnis wie Ihre verkettete Datentabelle erhalten.
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.
Betreff: Nach Zeile filtern, Spalten stapeln?Ah..... Sie haben Recht mit dem Löschen der ausgewählten Zeilen.Aber um nicht ausgewähltes zu löschen, verwenden Sie einfach
dtStack << Invert Row Selection;
und dann die Zeilen löschen.
Um mehrere unabhängige gestapelte Datentabellen anzuhängen, gehen Sie einfach wie folgt vor:
- Erstellen Sie vor dem Starten der sich wiederholenden Stack-Instanzen eine leere Basisdatentabelle, in der am Ende alle gestapelten Tabellen verkettet sind
dtBase = New Table("Base");
- Dann gilt für jede der gestapelten Tabellen, die Sie erstellen:
- Löschen Sie die nicht benötigten 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?So dachte ich, dass es möglich ist (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 der Spalte „Freq“, zunächst nach dem Wert „F0“ und dann nach „F1“. Diese befindet sich in Spalte 19. Ich füge diese Auswahl zur Auswahlliste mit dem Namen „stackcols“ hinzu. Nach der Schleife erwarte ich also eine zweispaltige Liste. Dann möchte ich daraus eine Tabelle machen (genannt „aa“). Aber es funktioniert nicht.
Betreff: Nach Zeile filtern, Spalten stapeln?(Aus Versehen auf „Als Lösung akzeptieren“ geklickt)
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 ein Beispiel für eine einfache Möglichkeit, die ausgewählten Zeilen bei Verwendung der Stack-Plattform 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;