自动化流程

时间:2017-08-19 08:28:07

标签: excel excel-formula

我有一个使用气球拍摄的数据集。气球的最大高度约为250米,然后降下来。我的高度数据如下所示:

Altitude
-2.3
-1.1
0.0
1.6
2.3
0.8
1.6
4.7
5.4
9.7
**12.0
11.5
15.9**
..
..
..
248.1
249.7
252.4
250.5
251.6
252.4
252.4
**246.1
248.5
239.8
238.8**
..
..
..
1.4
0.6
0
-0.5

我想在我的csv文件中创建一个新列,我的高度从0开始,然后增加到250,然后开始减少直到达到0而没有不规则。所有负值我想将其更改为0并且值大于250到250.大多数剩余值保持不变。但是,如果你看一下粗体值,我希望11.5改为12(前一个值)和248.5到246.1,这样趋势分别增加和减少。如何自动完成此过程?

1 个答案:

答案 0 :(得分:3)

我不会直接为您解答这个问题,但我会给您一个结构,以便您可以为自己开发解决方案。以下内容几乎完全依赖于IF函数,因此您需要熟悉此函数以及在另一个函数中嵌套IF

你的问题有很多不同的方面,所以帮助列处理这些不同的方面。

第一个辅助列处理您的第一组修正 - 即修正小于零或大于250米的高度。表单

的嵌套IF公式
=IF(condition1,result1,IF(condition2,result2,result3))

可以使用conditionresult参数的合适选项。

至少,您想要将高度值序列分为三个阶段:AscentPeak AltitudeDescent,因为您的第二组修正禁止降低海拔高度上升阶段和下降期间的增加。使用第二个辅助列来计算APD的值以表示这些阶段。您需要仔细考虑可以应用于计算此辅助列的公式,但使用单词:

  1. 如果前一个高度处于上升阶段,则当前海拔高度低于峰值高度时,当前海拔高度处于上升阶段,否则将处于海拔高度阶段。
  2. 如果前一个高度处于峰值高度阶段,那么如果当前高度低于峰值高度,则处于下降阶段,否则它将处于峰值高度阶段。
  3. 如果前一个高度处于下降阶段,则当前高度也将处于下降阶段。
  4. 1.,2.和3.中的每一个涉及前一个高度的阶段的初始测试,这只是该第二个辅助列的前一行中包含的值。将此值表示为PrAltPh,则初始测试的逻辑可写为

    =IF(prAltPh="A",calculation1,IF(prAltPh="P",calculation2,"D"))
    

    这里有几点需要注意:

    • calculation1实现上面1的这一部分:当海拔高度低于峰值高度时,当前海拔处于上升阶段,否则它将处于海拔高度阶段这个计算是一个提供" A"或" P"根据当前海拔高度的值(提示:使用另一个IF并使用第一个帮助列作为当前海拔高度。)
    • calculation2实现2.的上半部分:如果当前海拔高度低于峰值高度它处于下降阶段,否则它将处于峰值高度阶段所以又一个公式,提供了" P"或" D"
    • 在上面给出的公式中,不需要IF(PrAltPh="D",...,...)形式的短语,因为三个阶段由" A"," P"和" D"相互排斥。这两个IF明确地测试PrAltPh是否等于" A"或" P"如果两个测试均失败,那么与当前高度相关的阶段必须自动为" D"
    • 对于第一个高度读数,前面没有设置相位 高度(因为没有先前的高度),所以而不是 使用公式设置第一个海拔相位值设置它 手动选择" A"," P"或" D"你认为合适。

    确定calculation1calculation2的公式应该是什么,并将它们插入上面的嵌套IF。然后插入第二个辅助柱的第二个细胞。将公式复制为其余的高度值。检查结果是否符合您的预期,如果没有,要么弄清楚公式应该是什么,要么回过头来尝试并提出另一个问题。

    第三个辅助柱,可用于进行校正,即在上升阶段不允许降低高度,在下降过程中不增加。最后一个辅助列是计算第二组校正的另一个公式。它取决于当前海拔高度(第一辅助列)的相位(第二辅助列)及其与前一个校正值的关系(第三个辅助列中的前一个值)。再说一遍:

    1. 如果当前阶段是上升然后,如果当前高度不小于先前的校正高度,则将当前校正高度设置为等于当前高度,否则将其设置为先前校正高度。
    2. 如果当前阶段正在下降,那么如果当前高度不大于先前的校正高度,则将当前校正的高度设置为等于当前高度,否则将其设置为先前校正的高度。
    3. 如果当前阶段处于峰值高度,则将当前校正高度设置为等于当前高度。
    4. 使用CurAlt表示当前高度,CurAltPh表示与此高度相关的阶段,校正当前高度的公式的开发遵循以下熟悉的模式:

      `=IF(CurAltPh="A",calculation3,IF(CurAltPh="D",calculation4,CurAlt))`
      

      其中calculation3calculation4根据这两个值相互比较的方式分别提供CurAlt或之前的校正高度。再次存在在第三个辅助列中为第一个高度值设置校正高度值的问题,但应该明确应该使用什么值。

      虽然我希望上述内容能让你走上正轨,但至少还有一些陷阱需要警惕:

      • 如果您在上面calculation2的公式中将峰值高度硬编码为250,如果您的高度从未达到此高度,您将遇到问题。要查看此信息,请调整数据,看看会发生什么。
      • 如果您的数据超过250,然后低于,然后再高于,则下降阶段将从低于250的读数开始,因此,将不增加规则应用于高于250的第二(以及任何后续)高度读数这可能不是你想要的行为。例如,您可能希望将第一个和最后一个高于250的高度计算为属于峰值高度阶段。

      有解决这两个问题的解决方案,但它们确实强调了针对可能遇到的所有可能情况测试解决方案的重要性。

      图片说明了图表和一些夸张的数据,基于上述结构的解决方案可能是什么样子。

      enter image description here