Re: [O] Calculate differences of remote table numbers

2018-10-08 Thread Eric S Fraga
On Monday,  8 Oct 2018 at 17:19, Karl Voit wrote:
> Unfortunately, I have to admit that spreadsheets in Org are not
> something I can recommend to somebody who needs "something that just
> works" (like Excel-switcher). :-(

Maybe not but the combination of "It's all text", Emacs calc, and LaTeX export 
is unbeatable for me.  I've not used any other spreadsheet in years!

-- 

Eric S Fraga via Emacs 27.0.50, Org release_9.1.13-894-gf79545



Re: [O] Calculate differences of remote table numbers

2018-10-08 Thread Karl Voit
* Michael Brand  wrote:
> Hi Karl

Hi Michael,

> On Mon, Oct 1, 2018 at 5:02 PM Karl Voit  wrote:
>
>> I'd like to calculate the differences between rows of numbers of a
>> different table.
>
> For this kind of shifting row or column indexes I use Calc vector
> subscript. In your case:
>
> #+NAME: my-table
>| Numbers |
>|-|
>|   1 |
>|   5 |
>|   8 |
>|  12 |
>|  15 |
>
>| Line | Difference |
>|--+|
>|1 ||
>|2 |  4 |
>|3 |  3 |
>|4 |  4 |
>|5 |  3 |
> #+TBLFM: $2 = if($1 == 1, string(""), subscr(remote(my-table,
> @I$1..@II$1), @# - 1) - subscr(remote(my-table, @I$1..@II$1), @# - 2))
>
> or, avoiding @# completely in the formula for $2:
>
> #+TBLFM: $2 = if($1 == 1, string(""), subscr(remote(my-table,
> @I$1..@II$1), $1) - subscr(remote(my-table, @I$1..@II$1), $1 - 1))
>
> See also a similar example of subscr in the subsection "Dynamic
> variation of ranges" here:
> https://orgmode.org/worg/org-hacks.html#field-coordinates-in-formulas

Thanks for your post - it is working as expected! \o/

Also thanks for the URL - I added it to my knowledge base.

Unfortunately, I have to admit that spreadsheets in Org are not
something I can recommend to somebody who needs "something that just
works" (like Excel-switcher). :-(

However, when a table is finally working as expected, I really do
appreciate having this table (and its derived data) within my notes
and not locked away in a separate file.

-- 
get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
   > get Memacs from https://github.com/novoid/Memacs <
Personal Information Management > http://Karl-Voit.at/tags/pim/
Emacs-related > http://Karl-Voit.at/tags/emacs/




Re: [O] Calculate differences of remote table numbers

2018-10-05 Thread Michael Brand
Hi Karl

On Mon, Oct 1, 2018 at 5:02 PM Karl Voit  wrote:

> I'd like to calculate the differences between rows of numbers of a
> different table.

For this kind of shifting row or column indexes I use Calc vector
subscript. In your case:

#+NAME: my-table
| Numbers |
|-|
|   1 |
|   5 |
|   8 |
|  12 |
|  15 |

| Line | Difference |
|--+|
|1 ||
|2 |  4 |
|3 |  3 |
|4 |  4 |
|5 |  3 |
#+TBLFM: $2 = if($1 == 1, string(""), subscr(remote(my-table,
@I$1..@II$1), @# - 1) - subscr(remote(my-table, @I$1..@II$1), @# - 2))

or, avoiding @# completely in the formula for $2:

#+TBLFM: $2 = if($1 == 1, string(""), subscr(remote(my-table,
@I$1..@II$1), $1) - subscr(remote(my-table, @I$1..@II$1), $1 - 1))

See also a similar example of subscr in the subsection "Dynamic
variation of ranges" here:
https://orgmode.org/worg/org-hacks.html#field-coordinates-in-formulas

Michael



Re: [O] Calculate differences of remote table numbers

2018-10-04 Thread Nick Dokos
Karl Voit  writes:

>>
>> @# is the row number, so to refer to that row, you need @@#. Something like 
>> this,
>> although I didn't test to see if everything gets parsed correctly:
>>
>> #+TBLFM: $2=if(2 == @#, 0, remote(my-table,@@#$1))::$3=if(2 == @#,
>> 0, remote(my-table,@@#-1$1))::$4=if(2 == @#, 0,
>> (remote(my-table,@@#$1)-remote(my-table,@@#-1$1)))
>
> This is a huge step forward:
>
> #+NAME: my-table
> | Numbers |
>
> |-|
> |   1 |
> |   5 |
> |   8 |
> |  12 |
> |  15 |
>
> | Line | exp. Reference1 | exp. Reference2 | exp. Difference |
> |--+-+-+-|
> |1 |   0 |   0 |   0 |
> |2 |   5 |   1 |   4 |
> |3 |   8 |   5 |   3 |
> |4 |  12 |   8 |   4 |
> |5 |  15 |  12 |   3 |
>
>
> | Line | actual Reference1 | actual Reference2 | Difference |
> |--+---+---+|
> |1 | 0 | 0 |  0 |
> |2 | 5 | 5 |  0 |
> |3 | 8 | 8 |  0 |
> |4 |12 |12 |  0 |
> |5 |15 |15 |  0 |
>
> #+TBLFM: $2=if(2 == @#, 0, remote(my-table,@@#$1))::$3=if(2 == @#, 0, 
> remote(my-table,@@#-1$1))::$4=if(2 == @#, 0, 
> (remote(my-table,@@#$1)-remote(my-table,@@#-1$1)))
>
> Somehow, the "-1" in "@@#-1$1" does not have any effect: "@@#$1" and
> "@@#-1$" gives the same results.
>
> Do you have any idea why?

Yes, that's what I was afraid of when I said "...if everything is parsed 
correctly".
AFAICT, you cannot use expressions (I tried parentheses and curly braces as 
well: the
formula debugger complains that it expected a number.

One workaround is to add a column to the original table where you *can* 
calculate
using row/column expressions and then use each column where appropriate in the
remote references. Something like this:

--8<---cut here---start->8---
#+NAME: my-table
| Numbers | shifted |
|-+-|
|   1 |   0 |
|   5 |   1 |
|   8 |   5 |
|  12 |   8 |
|  15 |  12 |
#+TBLFM: @2$2..@>$2 = if(2==@#, 0, @-1$1)

| Line | exp. Reference1 | exp. Reference2 | exp. Difference |
|--+-+-+-|
|1 |   0 |   0 |   0 |
|2 |   5 |   1 |   4 |
|3 |   8 |   5 |   3 |
|4 |  12 |   8 |   4 |
|5 |  15 |  12 |   3 |

| Line | actual Reference1 | actual Reference2 | Difference |
|--+---+---+|
|1 | 0 | 0 |  0 |
|2 | 5 | 1 |  4 |
|3 | 8 | 5 |  3 |
|4 |12 | 8 |  4 |
|5 |15 |12 |  3 |
#+TBLFM: $2=if(2 == @#, 0, remote(my-table,@@#$1))::$3=if(2 == @#, 0, 
remote(my-table,@@#$2))::$4=$2-$3
--8<---cut here---end--->8---

But somebody (perhaps Michael Brand, if he is around) might come up
with better ideas.

>
>> Turning on formula debugging with `C-c {' helps.
>
> Woha! I didn't know that! And I also didn't know =C-c }= for
> displaying column/row numbers :-O *This* is going to be handy for me
> ;-)

Both Emacs and Org Mode are unending sources of new discovery and
delight!-)

-- 
Nick

"There are only two hard problems in computer science: cache
invalidation, naming things, and off-by-one errors." -Martin Fowler




Re: [O] Calculate differences of remote table numbers

2018-10-04 Thread Karl Voit
Hi Nick,

* Nick Dokos  wrote:
> Karl Voit  writes:
>
>> I'd like to calculate the differences between rows of numbers of a
>> different table.
>>
>> Here is a minimal example showing the issue:
>>
>> #+NAME: my-table
>> | Numbers |
>>
>> |-|
>> |   1 |
>> |   5 |
>> |   8 |
>> |  12 |
>> |  15 |
>>
>> This is what I expected: "exp. Reference1" and "exp. Reference2" is here only
>> to demonstrate that the assumed references are wrong in the third table. 
>> "exp.
>> Difference" is the column I want to get in the first place. I don't want to 
>> see
>> Reference 1 or 2 at all in my solution (since I need a couple of those
>> difference-columns).
>>
>> | Line | exp. Reference1 | exp. Reference2 | exp. Difference |
>> |--+-+-+-|
>> |1 |   0 |   0 |   0 |
>> |2 |   5 |   1 |   4 |
>> |3 |   8 |   5 |   3 |
>> |4 |  12 |   8 |   4 |
>> |5 |  15 |  12 |   3 |
>>
>> This is what I get instead:
>>
>> | Line | actual Reference1 | actual Reference2 | Difference |
>> |--+---+---+|
>> |1 | 0 | 0 |  0 |
>> |2 | 6 | 1 |  5 |
>> |3 |12 | 1 | 11 |
>> |4 |20 | 1 | 19 |
>> |5 |30 | 1 | 29 |
>
> @# is the row number, so to refer to that row, you need @@#. Something like 
> this,
> although I didn't test to see if everything gets parsed correctly:
>
> #+TBLFM: $2=if(2 == @#, 0, remote(my-table,@@#$1))::$3=if(2 == @#, 0, 
> remote(my-table,@@#-1$1))::$4=if(2 == @#, 0, 
> (remote(my-table,@@#$1)-remote(my-table,@@#-1$1)))

This is a huge step forward:

#+NAME: my-table
| Numbers |
|-|
|   1 |
|   5 |
|   8 |
|  12 |
|  15 |

| Line | exp. Reference1 | exp. Reference2 | exp. Difference |
|--+-+-+-|
|1 |   0 |   0 |   0 |
|2 |   5 |   1 |   4 |
|3 |   8 |   5 |   3 |
|4 |  12 |   8 |   4 |
|5 |  15 |  12 |   3 |


| Line | actual Reference1 | actual Reference2 | Difference |
|--+---+---+|
|1 | 0 | 0 |  0 |
|2 | 5 | 5 |  0 |
|3 | 8 | 8 |  0 |
|4 |12 |12 |  0 |
|5 |15 |15 |  0 |
#+TBLFM: $2=if(2 == @#, 0, remote(my-table,@@#$1))::$3=if(2 == @#, 0, 
remote(my-table,@@#-1$1))::$4=if(2 == @#, 0, 
(remote(my-table,@@#$1)-remote(my-table,@@#-1$1)))

Somehow, the "-1" in "@@#-1$1" does not have any effect: "@@#$1" and
"@@#-1$" gives the same results.

Do you have any idea why?

> Turning on formula debugging with `C-c {' helps.

Woha! I didn't know that! And I also didn't know =C-c }= for
displaying column/row numbers :-O *This* is going to be handy for me
;-)

-- 
get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
   > get Memacs from https://github.com/novoid/Memacs <
Personal Information Management > http://Karl-Voit.at/tags/pim/
Emacs-related > http://Karl-Voit.at/tags/emacs/




Re: [O] Calculate differences of remote table numbers

2018-10-01 Thread Nick Dokos
Karl Voit  writes:

> Hi!
>
> I'd like to calculate the differences between rows of numbers of a
> different table.
>
> Here is a minimal example showing the issue:
>
> #+NAME: my-table
> | Numbers |
>
> |-|
> |   1 |
> |   5 |
> |   8 |
> |  12 |
> |  15 |
>
> This is what I expected: "exp. Reference1" and "exp. Reference2" is here only
> to demonstrate that the assumed references are wrong in the third table. "exp.
> Difference" is the column I want to get in the first place. I don't want to 
> see
> Reference 1 or 2 at all in my solution (since I need a couple of those
> difference-columns).
>
> | Line | exp. Reference1 | exp. Reference2 | exp. Difference |
> |--+-+-+-|
> |1 |   0 |   0 |   0 |
> |2 |   5 |   1 |   4 |
> |3 |   8 |   5 |   3 |
> |4 |  12 |   8 |   4 |
> |5 |  15 |  12 |   3 |
>
> This is what I get instead:
>
> | Line | actual Reference1 | actual Reference2 | Difference |
> |--+---+---+|
> |1 | 0 | 0 |  0 |
> |2 | 6 | 1 |  5 |
> |3 |12 | 1 | 11 |
> |4 |20 | 1 | 19 |
> |5 |30 | 1 | 29 |
>
> #+TBLFM: $2=if(2 == @#, 0, remote(my-table,@#$1))::$3=if(2 == @#, 0, 
> remote(my-table,@#-1$1))::$4=if(2 == @#, 0, 
> (remote(my-table,@#$1)-remote(my-table,@#-1$1)))

@# is the row number, so to refer to that row, you need @@#. Something like 
this,
although I didn't test to see if everything gets parsed correctly:

#+TBLFM: $2=if(2 == @#, 0, remote(my-table,@@#$1))::$3=if(2 == @#, 0, 
remote(my-table,@@#-1$1))::$4=if(2 == @#, 0, 
(remote(my-table,@@#$1)-remote(my-table,@@#-1$1)))

Turning on formula debugging with `C-c {' helps.

-- 
Nick

"There are only two hard problems in computer science: cache
invalidation, naming things, and off-by-one errors." -Martin Fowler




[O] Calculate differences of remote table numbers

2018-10-01 Thread Karl Voit
Hi!

I'd like to calculate the differences between rows of numbers of a
different table.

Here is a minimal example showing the issue:

#+NAME: my-table
| Numbers |
|-|
|   1 |
|   5 |
|   8 |
|  12 |
|  15 |

This is what I expected: "exp. Reference1" and "exp. Reference2" is here only
to demonstrate that the assumed references are wrong in the third table. "exp.
Difference" is the column I want to get in the first place. I don't want to see
Reference 1 or 2 at all in my solution (since I need a couple of those
difference-columns).

| Line | exp. Reference1 | exp. Reference2 | exp. Difference |
|--+-+-+-|
|1 |   0 |   0 |   0 |
|2 |   5 |   1 |   4 |
|3 |   8 |   5 |   3 |
|4 |  12 |   8 |   4 |
|5 |  15 |  12 |   3 |

This is what I get instead:

| Line | actual Reference1 | actual Reference2 | Difference |
|--+---+---+|
|1 | 0 | 0 |  0 |
|2 | 6 | 1 |  5 |
|3 |12 | 1 | 11 |
|4 |20 | 1 | 19 |
|5 |30 | 1 | 29 |
#+TBLFM: $2=if(2 == @#, 0, remote(my-table,@#$1))::$3=if(2 == @#, 0, 
remote(my-table,@#-1$1))::$4=if(2 == @#, 0, 
(remote(my-table,@#$1)-remote(my-table,@#-1$1)))

As you can see, the "actual Reference1" are not the values from the first
column above (except the first one). "actual Reference2" is not the shifted
column 1 from above (except the first one). I have no clue, what these numbers
are.

Maybe you can help me (1) explaining what the numbers in actual Reference1 and
actual Reference2 are showing and (2) how to get the result ("expected
Difference"; without explicitly generating Reference 1 or 2).

Thanks!


-- 
get mail|git|SVN|photos|postings|SMS|phonecalls|RSS|CSV|XML into Org-mode:
   > get Memacs from https://github.com/novoid/Memacs <
Personal Information Management > http://Karl-Voit.at/tags/pim/
Emacs-related > http://Karl-Voit.at/tags/emacs/