Unterteilen einer Datentabelle mit einer For-Schleife und Durchführen von Spaltenoperationen in jeder TeilmengeLiebe Community, mir fällt dieses Thema schwer, vielleicht kann mir jemand helfen. Meine Datentabelle umfasst viele Teile unter „Seriennummer“, die zu unterschiedlichen Zeitpunkten „Zeitstempel“ gemessen wurden. Die Ergebnisse der Messung (wie Isc, Pmpp, ...)
wird mit zunehmender Messzeit zeilenweise gespeichert. Was ich tun muss, ist, den Messwert mit der allerersten Messung (früheste Zeit) für jedes Teil einzeln zu normalisieren. Wie Teil XY -> (Pmpp/Pmpp0; t=0)
Ich habe ein Skript geschrieben, das meine große Datentabelle in viele Untertabellen unterteilt, die nur einen Teil enthalten, und deren aufeinanderfolgende Messung im Zeitverlauf. Wie unten Code:
dt_LT = Open(big_datatable.jump);
Mod_Tab = dt_LT << Tabulate( Add Table( Row Table( Grouping Columns( :SerialNumber ) ) ) );
Mod_dt = Mod_Tab << Make Into Data Table;
Mod_dt << Set Name( "Modul-Datatable" );
Zahl_Mod = NRow (Mod_dt);
Current Data Table (Mod_dt);
Mod_List = :Name( "SerialNumber") << Get Values;
content= Text Box(Mod_List);
New Window ("Modul gefunden", content);
Current Data Table (dt_LT);
For (i = 1, i <= Zahl_Mod, i++,
dt_LT << clear row states;
dt_LT << select Where (:Name ("SerialNumber") == Mod_List[i]);
If( N Row( dt_LT << get selected rows ) < 3, Continue() );
Mod = dt_LT << Subset ((selected Rows), Output Table Name("Module_"||Mod_List[i]));
Das funktioniert ganz gut. Ich erhalte so viele Untertabellen wie nötig. Finden Sie auch, dass die früheste Messung in jeder Teilmenge einwandfrei funktioniert. Siehe Code unten:
Current data table(Mod);
Eval (init_Zeit = col minimum(:Timestamp);
init_flash = Mod << get rows where ((:Timestamp) == init_Zeit);
row = init_flash[1];
Was scheitert, ist die Normalisierung. Das Skript bleibt bei der letzten Teilmenge hängen und normalisiert alle anderen Daten mit der frühesten Messung der Tabelle der letzten Teilmenge.Siehe das Skript unten
Em0 = :Eff_Modul[row];
Ez0 = :Eff_Zelle[row];
FF0 = :FF[row];
Impp0 = :Impp[row];
Isc0 = :Isc[row];
Pmpp0 = :Pmpp[row];
Rs_Serial0 = :Rs_Serial[row];
Rsh_Shunt0 = :Rsh_Shunt[row];
Vmpp0 = :Vmpp[row];
Impp0 = :Impp[row];
Voc0 = :Voc[row];
New Column ("Pmpp_Norm", Numeric, continuous,
Formula ( :Pmpp / Pmpp0));
In der letzten Teilmengentabelle erhalte ich nach der Normalisierung in den Messspalten eine 1. In allen anderen Teiltabellen erhalte ich einen Wert, der für den normalisierten Wert unter 1 liegt. Wie kann ich innerhalb der for-Schleife zwischen Teilmengentabellen wechseln? Kann jemand helfen? Danke im Voraus
Mickael
Betreff: Unterteilen einer Datentabelle mit einer For-Schleife und Durchführen von Spaltenoperationen in jeder Teilmengees funktioniert gut. Danke für deine Hilfe!
Grüße, Mickael
Betreff: Unterteilen einer Datentabelle mit einer For-Schleife und Durchführen von Spaltenoperationen in jeder TeilmengeDanke für deine Antwort. Eigentlich hatte ich in meiner for-Schleife einen Ausdruck, den ich „I“ nannte, was zu Verwirrung mit dem Inkrementierungsindex „i“ führte. Ich habe meinen Ausdruck in „I1“ umbenannt und es hat funktioniert!
Danke, Mickael
Betreff: Unterteilen einer Datentabelle mit einer For-Schleife und Durchführen von Spaltenoperationen in jeder TeilmengeDer L-Wert ist die linke Seite einer Zuweisung. Sie versuchen, einer Nichtvariablen etwas zuzuweisen. Zum Beispiel:
Insert Into( { 5, 6, 7 }, 8 );
Diese Alternative würde funktionieren:
my list = { 5, 6, 7 };
Insert Into( my list, 8 );
Betreff: Unterteilen einer Datentabelle mit einer For-Schleife und Durchführen von Spaltenoperationen in jeder TeilmengeHallo, vielen Dank für deine superschnelle Antwort!
Ich habe das Skript wie vorgeschlagen umgeschrieben. Die Berechnung funktioniert gut für das erste Element der Liste, da die for-Schleife unterbrochen wird und nie zum nächsten Element wechselt. Der Debugger erwähnt etwas in Bezug auf ein Objekt, das keinen L-Wert hat ...
Ich weiß nicht wirklich, was es bedeutet. Muss ich eine Variable zurücksetzen? oder Auswahl auf einer aktiven Tabelle löschen?
Nochmals vielen Dank!
VG, Mickael
Betreff: Unterteilen einer Datentabelle mit einer For-Schleife und Durchführen von Spaltenoperationen in jeder TeilmengeSie verwenden eine globale Variable Pmpp0 in einer Spaltenformel und wenn sich der Wert von Pmpp0 bei jeder Iteration ständig ändert, ändern sich die Formelberechnungen entsprechend. Wenn Sie diesen Ansatz verwenden, müssen Sie explizit den ausgewerteten aktuellen Wert der Variablen in der Formel verwenden.
Zum Beispiel:
Pmpp0 = :Pmpp[row];
F = Eval Expr(:Pmpp / Expr(Pmpp0));// Formula expression with evaluated Pmpp0
Mod << New Column("Pmpp_Norm", Numeric, continuous, Formula(Name Expr(F)));