我有一些实验数据,每分钟测量一次,持续 10 分钟。
然后我想对集合中间的数据点子集取平均值。
我的解决方案是有一个隐藏列 (:Range),其公式包含条件(通过模态窗口输入),并将每行设置为 1 或 0(如果要包含在计算中)。
然后,我的输出列使用 Col Mean 函数来获取兴趣点的平均值。
这部分工作得很好,但我也希望第一个空白行(不包括在计算中)获取下一行的值,这将有助于进一步的数据操作。 我添加了滞后函数,如下所示。
If( :Range == 1,
Col Mean( :Measurement, :ID, :Range ),
Lag( :Measurement, -1 )
)
问题是,当我将其作为脚本运行时,滞后函数不起作用。 如果我手动输入上面的公式,它可以正常工作,但下面的脚本仅填充 :Range == 1 的行,尽管事实上我可以看到公式已正确应用于该列。
New Column( "Mean Measurement", Formula(
If( :Range == 1,
Col Mean( :Measurement, :ID, :Range ),
Lag( :Measurement, -1 ))))
这有什么原因吗?我可以通过什么方法强制列重新评估公式以使其正常运行?
请注意,重新运行公式功能似乎没有执行任何操作
为什么每隔 1 分钟进行 10 次测量? 为什么在时间过程中使用一些观察的平均值?
如果将整个曲线作为响应值进行分析,您可能会获得更多信息。 请参阅功能数据浏览器以获得更多想法。 您可以使用 JMP Pro 分析“功能 DOE”。
Lag() 函数对指定行进行操作,它不是“向量化”函数。在列函数中,行是隐式的(表的行),因此它在列公式中工作没有问题。
对于您的脚本,如果您在 lag 函数语句之前使用 Row()==<行号> 命令指定行,则 Lag 应返回一个值。
Row() = 3;
If( :Range == 1,
Col Mean( :Measurement, :ID, :Range ),
Lag( :Measurement, -1 )
)
另外,为了确保您知道,Lag(:column, ) 的滞后数字参数,如果它是负数,则实际上是“前向滞后”。在上面显示的示例中,它将查找下一行中的值,而不是上一行中的值。