emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] aggregate: percent, table headers, float format


From: Thierry Banel
Subject: Re: [O] aggregate: percent, table headers, float format
Date: Thu, 28 Jun 2018 19:36:54 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0

On 28/06/2018 14:53, Uwe Brauer wrote:
> Hi
>
> Org-aggregate is great and very helpful.
>
> However I have some problems/questions which I think a maybe interesting
> for the list.
>
> Take the following code
>
>
> #+begin_src emacs-lisp
> (setq org-calc-default-modes '(calc-internal-prec 12 calc-float-format
>                     (fix 3)    ;;; the default here was (float 8)
>                     calc-angle-mode deg calc-prefer-frac nil 
> calc-symbolic-mode nil calc-date-format
>                     (YYYY "-" MM "-" DD " " Www
>                           (" " hh ":" mm))
>                     calc-display-working-message t))
>
> #+end_src
>
> Which sets the float format to (fix 3) is taken into account by the
> org-table but ignored by org aggregate as the example below shows.

Iwill look into that.

In the meantime you can use a format specification ;f3which means "fix 3
decimal positions".

#+BEGIN: aggregate :table "raw-data" :cols "CalJunio count() 
(count()/19)*100;f3"
| CalJunio | count() | (count()/19)*100;f3 |
|----------+---------+---------------------|
| AP       |       7 |              36.842 |
| NT       |       1 |               5.263 |
| SS       |       5 |              26.316 |
| NP       |       6 |              31.579 |
#+END:

>
> #+TBLNAME: raw-data
> | Number | CalJunio |
> |--------+----------|
> |      1 | AP       |
> |      2 | NT       |
> |      3 | SS       |
> |      4 | SS       |
> |      5 | SS       |
> |      6 | AP       |
> |      7 | SS       |
> |      8 | NP       |
> |      9 | AP       |
> |     10 | NP       |
> |     11 | NP       |
> |     12 | AP       |
> |     13 | NP       |
> |     14 | AP       |
> |     15 | NP       |
> |     16 | AP       |
> |     17 | SS       |
> |     18 | NP       |
> |     19 | AP       |
> #+TBLFM: address@hidden
>
>
> I want that org aggregate counts the entries in the second column of the
> tale raw-data, which it does (thanks to Thierry), but I also would like
> to have, automatically, to calculate its percentage. And that it seems I
> can only do manually as the below example shows.
>
> #+BEGIN: aggregate :table "raw-data" :cols "CalJunio count()  
> (count()/19)*100"
> | CalJunio | count() | (count()/19)*100 |
> |----------+---------+------------------|
> | AP       |       7 |    36.8421052632 |
> | NT       |       1 |    5.26315789474 |
> | SS       |       5 |    26.3157894737 |
> | NP       |       6 |    31.5789473684 |
> #+END:

In this example the hardcoded 19 value is annoying. It is the total
count() of rows in raw-data table. It should be computed automatically
by some other mean. One way is to use another named aggregation:

#+name: total-count
#+BEGIN: aggregate :table "raw-data" :cols "count()"
| count() |
|---------|
|      19 |
#+END:

Then the cell containing 19 can be accessed using a "remote" formula:
remote(total-count,@2$1)

#+BEGIN: aggregate :table "raw-data" :cols "CalJunio count()"
| CalJunio | count() |        |
|----------+---------+--------|
| AP       |       7 | 36.842 |
| NT       |       1 |  5.263 |
| SS       |       5 | 26.316 |
| NP       |       6 | 31.579 |
#+TBLFM: $3=$2*100/remote(total-count,@2$1);f3
#+END:

Here a regular spreadsheet expression was used, instead of an aggregate
formula. Orgaggregate takes care of the table formulas between
re-computing. So you can refresh the aggregated table as often as needed.


>
> Is there a more elegant solution and how can I change the float format?
>
> By the way is there a way to customize the header of the above table,
> something like
>
>
> #+BEGIN: aggregate :table "raw-data" :cols "CalJunio count()  
> (count()/19)*100"
> | CalJunio | count |       percent |
> |----------+-------+---------------|
> | AP       |     7 | 36.8421052632 |
> | NT       |     1 | 5.26315789474 |
> | SS       |     5 | 26.3157894737 |
> | NP       |     6 | 31.5789473684 |
> #+END:
>

The header can be set with this cell formula: @1$3=percent

#+BEGIN: aggregate :table "raw-data" :cols "CalJunio count()"
| CalJunio | count() | percent |
|----------+---------+---------|
| AP       |       7 |  36.842 |
| NT       |       1 |   5.263 |
| SS       |       5 |  26.316 |
| NP       |       6 |  31.579 |
#+TBLFM: $3=$2*100/remote(total-count,@2$1);f3::@1$3=percent
#+END:

Again, the #+TBLFM specification survives refreshes (performed with C-c
C-c on the #+BEGIN: line). Everything else is recomputed.

> thanks
>
> Uwe Brauer 
>
>
>
Regards
Thierry





reply via email to

[Prev in Thread] Current Thread [Next in Thread]