Dear emacs and org-mode comrades.
Given:
- a table with
- a list of tags +
- their number of appearances in question 1 (Q1) & and question 2 (Q2).
- org support for tag groups (https://orgmode.org/manual/Tag-Hierarchy.html)
- 3 defined tag groups
- GroupTag1 (GT1)=tagA+tagC+tagD and
- GroupTag2 (GT2)=tagB+tagE
- GroupTag3 (GT3)=tagB+tagC+tagD (yes, some tags are in more than 1 group)
How can I count with pure elisp (assuming some table formula but I’m open to other ways) the sum of individual tag appearances of each tag group, for each question?
Example:
| tag | Q1 | Q2 |
|------+----+----|
| tagA | 9 | |
| tagB | 4 | 2 |
| tagC | 1 | 4 |
| tagD | | 5 |
| tagE | | 6 |
|------+----+----|
| GT1 | 10 | 9 |
| GT2 | 4 | 9 |
| GT3 | 5 | 11 |
Thanks a lot for your time and attention… :)
Here’s how I would approach it:
#+STARTUP: noptag #+TAGS: #+TAGS: [ GT1 : tagA tagC tagD ] #+TAGS: [ GT2 : tagB tagE ] #+TAGS: [ GT3 : tagB tagC tagD ] #+NAME: source | tag | Q1 | Q2 | |------+----+----| | tagA | 9 | | | tagB | 4 | 2 | | tagC | 1 | 4 | | tagD | | 5 | | tagE | | 6 | #+begin_src emacs-lisp (defun my-sum-tag-groups (source) (cons (car source) (mapcar (lambda (tag-group) (let ((tags (org--tags-expand-group (list (car tag-group)) org-tag-groups-alist nil))) (cons (car tag-group) (seq-map-indexed (lambda (colname i) (apply '+ (mapcar (lambda (tag) (let ((val (or (elt (assoc-default tag source) i) "0"))) (if (stringp val) (string-to-number val) (or val 0)))) tags))) (cdr (car source)))))) org-tag-groups-alist)) #+end_src #+begin_src emacs-lisp :var source=source :colnames no :results table (my-sum-tag-groups source) #+end_src #+RESULTS: :results: | tag | Q1 | Q2 | | GT1 | 10 | 9 | | GT2 | 4 | 8 | | GT3 | 5 | 11 | :end:Dear @sachac@lemmy.ml
I checked here day after day but didn’t saw your reply under mine until now, I’m so sorry…
Thank you very much, I will check it right now and come back soon. Slowly, but surely, this is going forward.
Again, thank you very much. nn(‿)nn b(‿)d
Dear @sachac (BTW, are you the legendary Sacha Chua?)
There was a parenthesis missing in the end, but it is working!!! :)))
I still have to understand the scope (does it works on the heading/ tree where it is called only, can I “point it” to a specific table, etc.) but it is a really great step forward.
And, as I wanted, it is short, simple, elegant, works perfectly and -specially- shows the power of elisp and how literate programming can be useful and powerful for reproducible research (this is part of my thesis).
I may continue with some questions, but it helps me a lot to learn.
Thank you so much! :D
As enlightening as this was, it must still be noted: publishing code to the wide Internet with a tab width of 2 is dastardly.
Dear all. I get that it may be a tad complicated, but if anyone sees at least a reference about how it may be done, please do share it here. Thanks a lot, in advance… :)



