根据第一列值汇总组织模式列

时间:2015-11-24 13:40:41

标签: emacs org-mode graphite

我有一个表在第一列中有重复的Unix时间戳,如果它们具有相同的Unix时间戳,我想总结第二列的值。

|-----Time---| Value |                                                                                                                                                                                                                                       
| 1420067592 |    23 |                                                                                                                                                                                                                                       
| 1420076520 |    10 |                                                                                                                                                                                                                                       
| 1420078752 |     2 |                                                                                                                                                                                                                                       
| 1420067592 |     6 |                                                                                                                                                                                                                                       
| 1420076520 |     4 |                                                                                                                                                                                                                                       
| 1420078752 |    89 |                                                                                                                                                                                                                                       
| 1420067592 |    66 |                                                                                                                                                                                                                                       
| 1420078752 |    81 |                                                                                                                                                                                                                                       
| 1420076520 |    15 |               

我之所以这样做,是因为我在代码块中进行多次窃听,并希望总结相同时间戳的值。

任何暗示如何在组织模式下执行此操作?用Emacs制作年度报告会非常酷:)

2 个答案:

答案 0 :(得分:2)

我找到了一个可接受的解决方案,使用生成的表作为另一个代码块的输入,该代码块正在执行Python片段以总结结果

#+NAME: results        
|       Time | Value |                                                                                                                                                                                                                                      
|------------+-------|                                                                                                                                                                                                                                       
| 1420067592 |    23 |                                                                                                                                                                                                                                       
| 1420076520 |    10 |                                                                                                                                                                                                                                       
| 1420078752 |     2 |                                                                                                                                                                                                                                       
| 1420067592 |     6 |                                                                                                                                                                                                                                       
| 1420076520 |     4 |                                                                                                                                                                                                                                       
| 1420078752 |    89 |                                                                                                                                                                                                                                       
| 1420067592 |    66 |                                                                                                                                                                                                                                       
| 1420078752 |    81 |                                                                                                                                                                                                                                       
| 1420076520 |    15 |                                                                                                                                                                                                                                                                                                                                 

#+begin_src python :var data=results :exports results                                                                                                                                                                                                        
output = {}                                                                                                                                                                                                                                                  

for line in data:                                                                                                                                                                                                                                            
    if output.get(line[0]):                                                                                                                                                                                                                                  
        output[line[0]] += line[1]                                                                                                                                                                                                                           
    else:                                                                                                                                                                                                                                                    
        output[line[0]] = line[1]                                                                                                                                                                                                                            

return [[x,y] for x,y in output.items()]                                                                                                                                                                                                                     
#+end_src                                                                                                                                                                                                                                                    

#+RESULTS:                                                                                                                                                                                                                                                   
| 1420067592 |  95 |                                                                                                                                                                                                                                         
| 1420076520 |  29 |                                                                                                                                                                                                                                         
| 1420078752 | 172 |             

答案 1 :(得分:1)

您可以使用 Melpa 上提供的 Orgtbl-Aggregate

#+name: thetimes
|       Time | Value |
|------------+-------|
| 1420067592 |    23 |
| 1420076520 |    10 |
| 1420078752 |     2 |
| 1420067592 |     6 |
| 1420076520 |     4 |
| 1420078752 |    89 |
| 1420067592 |    66 |
| 1420078752 |    81 |
| 1420076520 |    15 |

#+BEGIN: aggregate :table "thetimes" :cols "Time vsum(Value)"
|       Time | vsum(Value) |
|------------+-------------|
| 1420067592 |          95 |
| 1420076520 |          29 |
| 1420078752 |         172 |
#+END: