emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Table calculation
@ 2006-12-10 19:32 Xiao-Yong Jin
  0 siblings, 0 replies; 4+ messages in thread
From: Xiao-Yong Jin @ 2006-12-10 19:32 UTC (permalink / raw)
  To: emacs-orgmode

Hi, in order to calculate the average with some invalid column, I
managed to write a short elisp script.  You can see the difference
between the `0' and the `-' in this table:

| ! |  P1 |  P2 | P3  |  P4 |  P5 | Average |
| # | 3.6 | 4.0 | 4.8 |   0 | 4.7 |    3.42 |
| # | 5.0 | 3.3 | -   | 4.7 | 4.0 |    4.25 |
#+TBLFM: $7='(let ((data '("$P1" "$P2" "$P3" "$P4" "$P5"))
                   (n 0)
                   (total 0))
                  (while data
                    (unless (string= (car data) "-")
                      (setq total
                        (+ total (string-to-number (car data))))
                      (setq n (1+ n)))
                    (setq data (cdr data)))
                  (/ total n));%.2f

It is reformatted to be more readable, since one cannot put a
multi-line expression in #+TBLFM.

I admit it is really painful to do this.  I want to know if anyone
knows how I can simplify this a bit, or if there is a short cut to do
this.  I'm not familiar with the internal implementation of org table,
but is there any possibility to make it as a built-in function that I
can put it somewhere in the same org file so that I can easily do some
thing like mymean($P1..$P5)?

Thanks,
Xiao-Yong
-- 
       ,,,
      (o o)
---ooO-(_)-Ooo---

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Table calculation
@ 2016-02-20 19:41 Brett Presnell
  2016-02-20 21:13 ` Michael Brand
  0 siblings, 1 reply; 4+ messages in thread
From: Brett Presnell @ 2016-02-20 19:41 UTC (permalink / raw)
  To: emacs-orgmode


In the following table, the last row gives the number of empty cells
following the last nonempty cell in each column (except the first column
of course).  I would like to create a TBLFM formula that does this
calculation for me automatically.  Some time ago I tried using
org-lookup-last and org-lookup-all for this, but I never got it to work.
Any ideas/solutions?

|   Date | AA | BB | CC | DD | EE | FF | GG | HH | II | JJ | KK | LL | MM |
|--------+----+----+----+----+----+----+----+----+----+----+----+----+----|
|      / | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> |
| 201005 |    |    |    |    |  1 |    |    |  1 |    |    |    |  1 |    |
| 201008 |    |    |    |  1 |    |    |    |    |    |    |    |    |    |
| 201012 |    |    |    |    |    |    |    |    |    |    |    |    |    |
| 201105 |    |    |    |    |    |  1 |    |    |    |    |    |    |    |
| 201108 |    |    |    |    |    |    |  1 |    |    |    |    |    |    |
| 201112 |    |    |    |    |    |    |    |    |    |  1 |    |    |    |
| 201205 |    |    |    |    |    |    |    |    |    |    |    |    |    |
| 201208 |    |    |    |    |    |    |    |    |    |    |    |    |    |
| 201212 |    |    |    |    |    |    |    |    |  1 |    |    |    |    |
| 201305 |    |    |  1 |    |    |    |    |  2 |    |    |  1 |    |    |
| 201308 |  1 |    |    |    |    |    |    |    |    |    |    |    |    |
| 201312 |    |    |    |    |    |    |    |    |    |    |    |    |  1 |
| 201405 |    |    |    |    |    |    |    |  1 |    |    |    |  1 |    |
| 201408 |    |  1 |    |    |    |    |    |    |    |    |    |    |    |
| 201412 |    |    |    |    |  1 |    |    |    |    |    |    |    |    |
| 201505 |    |    |    |  1 |    |    |    |    |    |    |    |    |    |
| 201508 |    |    |    |    |    |    |    |    |  1 |    |    |    |    |
| 201512 |    |    |    |    |    |    |  1 |    |    |    |    |    |    |
| 201605 |    |    |    |    |    |    |    |    |    |    |    |    |    |
|--------+----+----+----+----+----+----+----+----+----+----+----+----+----|
|        |  8 |  5 |  9 |  3 |  4 | 15 |  1 |  6 |  2 | 13 |  9 |  6 |  7 |

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Table calculation
  2016-02-20 19:41 Brett Presnell
@ 2016-02-20 21:13 ` Michael Brand
  2016-02-20 22:48   ` Brett Presnell
  0 siblings, 1 reply; 4+ messages in thread
From: Michael Brand @ 2016-02-20 21:13 UTC (permalink / raw)
  To: Brett Presnell; +Cc: Org Mode

Hi Brett

On Sat, Feb 20, 2016 at 8:41 PM, Brett Presnell <presnell@member.fsf.org> wrote:

> In the following table, the last row gives the number of empty cells
> following the last nonempty cell in each column (except the first column
> of course).  I would like to create a TBLFM formula that does this
> calculation for me automatically.  Some time ago I tried using
> org-lookup-last and org-lookup-all for this, but I never got it to work.
> Any ideas/solutions?
>
> |   Date | AA | BB | CC | DD | EE | FF | GG | HH | II | JJ | KK | LL | MM |
> |--------+----+----+----+----+----+----+----+----+----+----+----+----+----|
> |      / | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> |
> | 201005 |    |    |    |    |  1 |    |    |  1 |    |    |    |  1 |    |
> | 201008 |    |    |    |  1 |    |    |    |    |    |    |    |    |    |
> | 201012 |    |    |    |    |    |    |    |    |    |    |    |    |    |
> | 201105 |    |    |    |    |    |  1 |    |    |    |    |    |    |    |
> | 201108 |    |    |    |    |    |    |  1 |    |    |    |    |    |    |
> | 201112 |    |    |    |    |    |    |    |    |    |  1 |    |    |    |
> | 201205 |    |    |    |    |    |    |    |    |    |    |    |    |    |
> | 201208 |    |    |    |    |    |    |    |    |    |    |    |    |    |
> | 201212 |    |    |    |    |    |    |    |    |  1 |    |    |    |    |
> | 201305 |    |    |  1 |    |    |    |    |  2 |    |    |  1 |    |    |
> | 201308 |  1 |    |    |    |    |    |    |    |    |    |    |    |    |
> | 201312 |    |    |    |    |    |    |    |    |    |    |    |    |  1 |
> | 201405 |    |    |    |    |    |    |    |  1 |    |    |    |  1 |    |
> | 201408 |    |  1 |    |    |    |    |    |    |    |    |    |    |    |
> | 201412 |    |    |    |    |  1 |    |    |    |    |    |    |    |    |
> | 201505 |    |    |    |  1 |    |    |    |    |    |    |    |    |    |
> | 201508 |    |    |    |    |    |    |    |    |  1 |    |    |    |    |
> | 201512 |    |    |    |    |    |    |  1 |    |    |    |    |    |    |
> | 201605 |    |    |    |    |    |    |    |    |    |    |    |    |    |
> |--------+----+----+----+----+----+----+----+----+----+----+----+----+----|
> |        |  8 |  5 |  9 |  3 |  4 | 15 |  1 |  6 |  2 | 13 |  9 |  6 |  7 |

Two of the possible solutions:

|   Date | AA | BB | CC | DD | EE | FF | GG | HH | II | JJ | KK | LL | MM |
|      / | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> |
|--------+----+----+----+----+----+----+----+----+----+----+----+----+----|
| 201005 |    |    |    |    |  1 |    |    |  1 |    |    |    |  1 |    |
| 201008 |    |    |    |  1 |    |    |    |    |    |    |    |    |    |
| 201012 |    |    |    |    |    |    |    |    |    |    |    |    |    |
| 201105 |    |    |    |    |    |  1 |    |    |    |    |    |    |    |
| 201108 |    |    |    |    |    |    |  1 |    |    |    |    |    |    |
| 201112 |    |    |    |    |    |    |    |    |    |  1 |    |    |    |
| 201205 |    |    |    |    |    |    |    |    |    |    |    |    |    |
| 201208 |    |    |    |    |    |    |    |    |    |    |    |    |    |
| 201212 |    |    |    |    |    |    |    |    |  1 |    |    |    |    |
| 201305 |    |    |  1 |    |    |    |    |  2 |    |    |  1 |    |    |
| 201308 |  1 |    |    |    |    |    |    |    |    |    |    |    |    |
| 201312 |    |    |    |    |    |    |    |    |    |    |    |    |  1 |
| 201405 |    |    |    |    |    |    |    |  1 |    |    |    |  1 |    |
| 201408 |    |  1 |    |    |    |    |    |    |    |    |    |    |    |
| 201412 |    |    |    |    |  1 |    |    |    |    |    |    |    |    |
| 201505 |    |    |    |  1 |    |    |    |    |    |    |    |    |    |
| 201508 |    |    |    |    |    |    |    |    |  1 |    |    |    |    |
| 201512 |    |    |    |    |    |    |  1 |    |    |    |    |    |    |
| 201605 |    |    |    |    |    |    |    |    |    |    |    |    |    |
|--------+----+----+----+----+----+----+----+----+----+----+----+----+----|
|        |  8 |  5 |  9 |  3 |  4 | 15 |  1 |  6 |  2 | 13 |  9 |  6 |  7 |
#+TBLFM: @>$<<..@>$> = find(rev(@I..@II), 1) - 1; E

Note that I moved the header separator line.

When the last non-empty cell is not limited to be always 1 it gets a
bit more complicated:

#+TBLFM: @>$<<..@>$> = '(position-if-not (lambda (x) (equal x ""))
(reverse '(@I..@II))); E

Michael

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Table calculation
  2016-02-20 21:13 ` Michael Brand
@ 2016-02-20 22:48   ` Brett Presnell
  0 siblings, 0 replies; 4+ messages in thread
From: Brett Presnell @ 2016-02-20 22:48 UTC (permalink / raw)
  To: Michael Brand; +Cc: Org Mode


Fantastic.  Thanks Michael.

Michael Brand <michael.ch.brand@gmail.com> writes:

> Hi Brett
>
> On Sat, Feb 20, 2016 at 8:41 PM, Brett Presnell <presnell@member.fsf.org> wrote:
>
>> In the following table, the last row gives the number of empty cells
>> following the last nonempty cell in each column (except the first column
>> of course).  I would like to create a TBLFM formula that does this
>> calculation for me automatically.  Some time ago I tried using
>> org-lookup-last and org-lookup-all for this, but I never got it to work.
>> Any ideas/solutions?
>>
>> |   Date | AA | BB | CC | DD | EE | FF | GG | HH | II | JJ | KK | LL | MM |
>> |--------+----+----+----+----+----+----+----+----+----+----+----+----+----|
>> |      / | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> |
>> | 201005 |    |    |    |    |  1 |    |    |  1 |    |    |    |  1 |    |
>> | 201008 |    |    |    |  1 |    |    |    |    |    |    |    |    |    |
>> | 201012 |    |    |    |    |    |    |    |    |    |    |    |    |    |
>> | 201105 |    |    |    |    |    |  1 |    |    |    |    |    |    |    |
>> | 201108 |    |    |    |    |    |    |  1 |    |    |    |    |    |    |
>> | 201112 |    |    |    |    |    |    |    |    |    |  1 |    |    |    |
>> | 201205 |    |    |    |    |    |    |    |    |    |    |    |    |    |
>> | 201208 |    |    |    |    |    |    |    |    |    |    |    |    |    |
>> | 201212 |    |    |    |    |    |    |    |    |  1 |    |    |    |    |
>> | 201305 |    |    |  1 |    |    |    |    |  2 |    |    |  1 |    |    |
>> | 201308 |  1 |    |    |    |    |    |    |    |    |    |    |    |    |
>> | 201312 |    |    |    |    |    |    |    |    |    |    |    |    |  1 |
>> | 201405 |    |    |    |    |    |    |    |  1 |    |    |    |  1 |    |
>> | 201408 |    |  1 |    |    |    |    |    |    |    |    |    |    |    |
>> | 201412 |    |    |    |    |  1 |    |    |    |    |    |    |    |    |
>> | 201505 |    |    |    |  1 |    |    |    |    |    |    |    |    |    |
>> | 201508 |    |    |    |    |    |    |    |    |  1 |    |    |    |    |
>> | 201512 |    |    |    |    |    |    |  1 |    |    |    |    |    |    |
>> | 201605 |    |    |    |    |    |    |    |    |    |    |    |    |    |
>> |--------+----+----+----+----+----+----+----+----+----+----+----+----+----|
>> |        |  8 |  5 |  9 |  3 |  4 | 15 |  1 |  6 |  2 | 13 |  9 |  6 |  7 |
>
> Two of the possible solutions:
>
> |   Date | AA | BB | CC | DD | EE | FF | GG | HH | II | JJ | KK | LL | MM |
> |      / | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> | <> |
> |--------+----+----+----+----+----+----+----+----+----+----+----+----+----|
> | 201005 |    |    |    |    |  1 |    |    |  1 |    |    |    |  1 |    |
> | 201008 |    |    |    |  1 |    |    |    |    |    |    |    |    |    |
> | 201012 |    |    |    |    |    |    |    |    |    |    |    |    |    |
> | 201105 |    |    |    |    |    |  1 |    |    |    |    |    |    |    |
> | 201108 |    |    |    |    |    |    |  1 |    |    |    |    |    |    |
> | 201112 |    |    |    |    |    |    |    |    |    |  1 |    |    |    |
> | 201205 |    |    |    |    |    |    |    |    |    |    |    |    |    |
> | 201208 |    |    |    |    |    |    |    |    |    |    |    |    |    |
> | 201212 |    |    |    |    |    |    |    |    |  1 |    |    |    |    |
> | 201305 |    |    |  1 |    |    |    |    |  2 |    |    |  1 |    |    |
> | 201308 |  1 |    |    |    |    |    |    |    |    |    |    |    |    |
> | 201312 |    |    |    |    |    |    |    |    |    |    |    |    |  1 |
> | 201405 |    |    |    |    |    |    |    |  1 |    |    |    |  1 |    |
> | 201408 |    |  1 |    |    |    |    |    |    |    |    |    |    |    |
> | 201412 |    |    |    |    |  1 |    |    |    |    |    |    |    |    |
> | 201505 |    |    |    |  1 |    |    |    |    |    |    |    |    |    |
> | 201508 |    |    |    |    |    |    |    |    |  1 |    |    |    |    |
> | 201512 |    |    |    |    |    |    |  1 |    |    |    |    |    |    |
> | 201605 |    |    |    |    |    |    |    |    |    |    |    |    |    |
> |--------+----+----+----+----+----+----+----+----+----+----+----+----+----|
> |        |  8 |  5 |  9 |  3 |  4 | 15 |  1 |  6 |  2 | 13 |  9 |  6 |  7 |
> #+TBLFM: @>$<<..@>$> = find(rev(@I..@II), 1) - 1; E
>
> Note that I moved the header separator line.
>
> When the last non-empty cell is not limited to be always 1 it gets a
> bit more complicated:
>
> #+TBLFM: @>$<<..@>$> = '(position-if-not (lambda (x) (equal x ""))
> (reverse '(@I..@II))); E
>
> Michael

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-02-20 22:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-12-10 19:32 Table calculation Xiao-Yong Jin
  -- strict thread matches above, loose matches on Subject: below --
2016-02-20 19:41 Brett Presnell
2016-02-20 21:13 ` Michael Brand
2016-02-20 22:48   ` Brett Presnell

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).