* Calculate differences of remote table numbers @ 2018-10-01 15:01 Karl Voit 2018-10-01 16:36 ` Nick Dokos 2018-10-05 17:46 ` Michael Brand 0 siblings, 2 replies; 10+ messages in thread From: Karl Voit @ 2018-10-01 15:01 UTC (permalink / raw) To: emacs-orgmode 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/ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Calculate differences of remote table numbers 2018-10-01 15:01 Calculate differences of remote table numbers Karl Voit @ 2018-10-01 16:36 ` Nick Dokos 2018-10-04 7:25 ` Karl Voit 2018-10-05 17:46 ` Michael Brand 1 sibling, 1 reply; 10+ messages in thread From: Nick Dokos @ 2018-10-01 16:36 UTC (permalink / raw) To: emacs-orgmode Karl Voit <devnull@Karl-Voit.at> 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 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Calculate differences of remote table numbers 2018-10-01 16:36 ` Nick Dokos @ 2018-10-04 7:25 ` Karl Voit 2018-10-04 16:37 ` Nick Dokos 0 siblings, 1 reply; 10+ messages in thread From: Karl Voit @ 2018-10-04 7:25 UTC (permalink / raw) To: emacs-orgmode Hi Nick, * Nick Dokos <ndokos@gmail.com> wrote: > Karl Voit <devnull@Karl-Voit.at> 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/ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Calculate differences of remote table numbers 2018-10-04 7:25 ` Karl Voit @ 2018-10-04 16:37 ` Nick Dokos 0 siblings, 0 replies; 10+ messages in thread From: Nick Dokos @ 2018-10-04 16:37 UTC (permalink / raw) To: emacs-orgmode Karl Voit <devnull@Karl-Voit.at> 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 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Calculate differences of remote table numbers 2018-10-01 15:01 Calculate differences of remote table numbers Karl Voit 2018-10-01 16:36 ` Nick Dokos @ 2018-10-05 17:46 ` Michael Brand 2018-10-08 15:19 ` Karl Voit 1 sibling, 1 reply; 10+ messages in thread From: Michael Brand @ 2018-10-05 17:46 UTC (permalink / raw) To: Karl Voit; +Cc: Org Mode Hi Karl On Mon, Oct 1, 2018 at 5:02 PM Karl Voit <devnull@karl-voit.at> 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 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Calculate differences of remote table numbers 2018-10-05 17:46 ` Michael Brand @ 2018-10-08 15:19 ` Karl Voit 2018-10-08 15:50 ` Eric S Fraga 0 siblings, 1 reply; 10+ messages in thread From: Karl Voit @ 2018-10-08 15:19 UTC (permalink / raw) To: emacs-orgmode * Michael Brand <michael.ch.brand@gmail.com> wrote: > Hi Karl Hi Michael, > On Mon, Oct 1, 2018 at 5:02 PM Karl Voit <devnull@karl-voit.at> 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/ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Calculate differences of remote table numbers 2018-10-08 15:19 ` Karl Voit @ 2018-10-08 15:50 ` Eric S Fraga 2018-10-08 16:16 ` Complexity of using spreadsheet functionality (was: Calculate differences of remote table numbers) Karl Voit 0 siblings, 1 reply; 10+ messages in thread From: Eric S Fraga @ 2018-10-08 15:50 UTC (permalink / raw) To: Karl Voit; +Cc: Karl Voit, emacs-orgmode 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 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Complexity of using spreadsheet functionality (was: Calculate differences of remote table numbers) 2018-10-08 15:50 ` Eric S Fraga @ 2018-10-08 16:16 ` Karl Voit 2018-10-09 5:34 ` Complexity of using spreadsheet functionality Eric S Fraga 2018-10-12 21:48 ` Complexity of using spreadsheet functionality (was: Calculate differences of remote table numbers) Samuel Wales 0 siblings, 2 replies; 10+ messages in thread From: Karl Voit @ 2018-10-08 16:16 UTC (permalink / raw) To: emacs-orgmode * Eric S Fraga <esflists@gmail.com> wrote: > 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! I do think that we all agree on that. But it's more "I accept the nasty issues I have while creating complex spreadsheet stuff because I got tons of advantages elsewhere in this tool" instead of "hey, you're using Excel. Wanna switch to Org/calc because it offers equivalent spreadsheet functionality on top of many other advantages". You have to use Org for a while in order to be able to grasp the large universe of possibilities. It's really not that easy to explain or show. It's something you have to experience IMHO. And after you had this epiphany, you accept even hard to do things like complex calc references. -- 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/ ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Complexity of using spreadsheet functionality 2018-10-08 16:16 ` Complexity of using spreadsheet functionality (was: Calculate differences of remote table numbers) Karl Voit @ 2018-10-09 5:34 ` Eric S Fraga 2018-10-12 21:48 ` Complexity of using spreadsheet functionality (was: Calculate differences of remote table numbers) Samuel Wales 1 sibling, 0 replies; 10+ messages in thread From: Eric S Fraga @ 2018-10-09 5:34 UTC (permalink / raw) To: Karl Voit; +Cc: Karl Voit, emacs-orgmode On Monday, 8 Oct 2018 at 18:16, Karl Voit wrote: > You have to use Org for a while in order to be able to grasp the > large universe of possibilities. It's really not that easy to > explain or show. It's something you have to experience IMHO. And > after you had this epiphany, you accept even hard to do things like > complex calc references. I think that's definitely the case. There are things in org that should be easier. However, the one really good feature of org is that it is easy to start with the simple outline and task management capabilities and then slowly discover the other very powerful features. -- Eric S Fraga via Emacs 27.0.50, Org release_9.1.13-783-g97fac4 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Complexity of using spreadsheet functionality (was: Calculate differences of remote table numbers) 2018-10-08 16:16 ` Complexity of using spreadsheet functionality (was: Calculate differences of remote table numbers) Karl Voit 2018-10-09 5:34 ` Complexity of using spreadsheet functionality Eric S Fraga @ 2018-10-12 21:48 ` Samuel Wales 1 sibling, 0 replies; 10+ messages in thread From: Samuel Wales @ 2018-10-12 21:48 UTC (permalink / raw) To: Karl Voit; +Cc: emacs-orgmode me too on spreadsheets are challenging in org [but powerful]. i wonder what would make them more intuitive. i use them infrequently, so i have to re-learn them when i use them. it would be really neat if we could do something like c-c ' that pulls up a more immediately intuitive interface. maybe an ses mode type spreadsheet? for some tasks, some might even prefer a regular spreadsheet whose serialized dot files get stored in an org block. but that would not show the table in org, which you want also. ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2018-10-12 21:49 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-10-01 15:01 Calculate differences of remote table numbers Karl Voit 2018-10-01 16:36 ` Nick Dokos 2018-10-04 7:25 ` Karl Voit 2018-10-04 16:37 ` Nick Dokos 2018-10-05 17:46 ` Michael Brand 2018-10-08 15:19 ` Karl Voit 2018-10-08 15:50 ` Eric S Fraga 2018-10-08 16:16 ` Complexity of using spreadsheet functionality (was: Calculate differences of remote table numbers) Karl Voit 2018-10-09 5:34 ` Complexity of using spreadsheet functionality Eric S Fraga 2018-10-12 21:48 ` Complexity of using spreadsheet functionality (was: Calculate differences of remote table numbers) Samuel Wales
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).