使用 For 迴圈對資料表進行子集化並在每個子集中執行列操作親愛的社區,我在這個主題上遇到了困難,也許有人可以幫忙。 我的資料表包含「序號」下的許多部分,這些部分是在不同時間點「時間戳記」測量的。 測量結果(如 Isc、Pmpp...)
隨著測量時間的增加,它儲存在行中。 我需要做的是將每個零件的第一次測量(最早的時間)的測量值分別標準化。 像 XY 部分 -> (Pmpp/Pmpp0; t=0)
我編寫了一個腳本,將我的大數據表子集為許多子表,其中僅包含一個部分及其隨時間的連續測量。 如下程式碼:
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]));
這很好用。 我根據需要得到盡可能多的子表。 還可以找到每個子集最早的測量結果,效果很好。 請參閱下面的程式碼:
Current data table(Mod);
Eval (init_Zeit = col minimum(:Timestamp);
init_flash = Mod << get rows where ((:Timestamp) == init_Zeit);
row = init_flash[1];
失敗的是正常化。 該腳本卡在最後一個子集上,並使用最後一個子集表的最早測量值對所有其他資料進行標準化。請參閱下面的腳本
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));
在最後一個子表中,我在測量列中歸一化後得到 1。在所有其他子表中,我得到的歸一化值低於 1。 如何在 for 迴圈內的子集表之間切換? 有人可以幫忙嗎? 提前謝謝
米凱爾
回覆:使用 For 迴圈對資料表進行子集化並在每個子集中執行列操作效果很好。 謝謝你的幫忙!
Rgds,邁克爾
回覆:使用 For 迴圈對資料表進行子集化並在每個子集中執行列操作感謝您的回覆。 實際上,我在 for 循環中有一個表達式,我稱之為“I”,這與增量索引“i”造成了混淆。 我將表達式重命名為“I1”,它成功了!
謝謝,邁克爾
回覆:使用 For 迴圈對資料表進行子集化並在每個子集中執行列操作L 值是賦值的左側。 您正在嘗試將某些內容指派給非變數。 例如:
Insert Into( { 5, 6, 7 }, 8 );
這種替代方案可行:
my list = { 5, 6, 7 };
Insert Into( my list, 8 );
回覆:使用 For 迴圈對資料表進行子集化並在每個子集中執行列操作您好,感謝您的超快速答覆!
我按照建議重寫了腳本。 該計算對於列表的第一項效果很好,而不是 for 循環中斷並且永遠不會切換到下一項。 調試器提到了一些沒有 L 值的物件...
實在不知道是什麼意思。 我需要重置任何變數嗎?或刪除活動表上的選擇?
再次非常感謝!
VG,麥可
回覆:使用 For 迴圈對資料表進行子集化並在每個子集中執行列操作您使用全域變數普馬普0在列公式中,當 Pmpp0 的值隨著每次迭代不斷變化時,公式計算也會隨之變化。 如果使用此方法,您必須明確使用公式中變數的評估目前值。
例如:
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)));