使用 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 循环对数据表进行子集化并在每个子集中执行列操作您使用全局变量pmpp0在列公式中,当 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)));