使用 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)));