Hi Cecil On Sun, Jun 1, 2014 at 2:24 PM, Cecil Westerhof <cldwester...@gmail.com> wrote: > But what if I would want to know the > difference between the previous filled one, divided by the distance? > > For example: > |-------+------------| > | value | difference | > |-------+------------| > | 12 | | > | 15 | 3 | > | | | > | 83 | 34 | > | | | > | | | > | | | > | 87 | 1 | > | | | > | | | > | | | > | 85 | -0.5 | > | | | > |-------+------------|
More as a demonstration of what Calc can do, divided up into some intermediate steps: |-------+---------------------------------------------------------| | value | difference | |-------+---------------------------------------------------------| | 12 | | | 15 | [15, 12] | | | | | 83 | [83, nan, 15, 12] | | | | | | | | | | | 87 | [87, nan, nan, nan, 83, nan, 15, 12] | | | | | | | | | | | 85 | [85, nan, nan, nan, 87, nan, nan, nan, 83, nan, 15, 12] | | | | |-------+---------------------------------------------------------| #+TBLFM: $2 = if(vlen(@-I$1..@0$1) == 1 || "$1" == "nan", string(""), rev(@-I$1..@0$1)); E |-------+----------------------------------------------------| | value | difference | |-------+----------------------------------------------------| | 12 | | | 15 | [0, 0] | | | | | 83 | [0, nan, 0, 0] | | | | | | | | | | | 87 | [0, nan, nan, nan, 0, nan, 0, 0] | | | | | | | | | | | 85 | [0, nan, nan, nan, 0, nan, nan, nan, 0, nan, 0, 0] | | | | |-------+----------------------------------------------------| #+TBLFM: $2 = if(vlen(@-I$1..@0$1) == 1 || "$1" == "nan", string(""), 0 * rev(@-I$1..@0$1)); E Distance to previous element: |-------+------------| | value | difference | |-------+------------| | 12 | | | 15 | 1 | | | | | 83 | 2 | | | | | | | | | | | 87 | 4 | | | | | | | | | | | 85 | 4 | | | | |-------+------------| #+TBLFM: $2 = if(vlen(@-I$1..@0$1) == 1 || "$1" == "nan", string(""), find(0 * rev(@-I$1..@0$1), 0, 2) - 1); E Previous element: |-------+------------| | value | difference | |-------+------------| | 12 | | | 15 | 12 | | | | | 83 | 15 | | | | | | | | | | | 87 | 83 | | | | | | | | | | | 85 | 87 | | | | |-------+------------| #+TBLFM: $2 = if(vlen(@-I$1..@0$1) == 1 || "$1" == "nan", string(""), subscr(rev(@-I$1..@0$1), find(0 * rev(@-I$1..@0$1), 0, 2)); E Combined: |-------+------------| | value | difference | |-------+------------| | 12 | | | 15 | 3 | | | | | 83 | 34 | | | | | | | | | | | 87 | 1 | | | | | | | | | | | 85 | -0.5 | | | | |-------+------------| #+TBLFM: $2 = if(vlen(@-I$1..@0$1) == 1 || "$1" == "nan", string(""), ($1 - subscr(rev(@-I$1..@0$1), find(0 * rev(@-I$1..@0$1), 0, 2))) / (find(0 * rev(@-I$1..@0$1), 0, 2) - 1)); E For many here on the list it would probably be easier and more interesting to write a TBLFM in Lisp. Michael