有条件地计算组织模式电子表格中列中的元素

时间:2012-02-07 12:59:13

标签: emacs org-mode org-table

我正在通过org-mode电子表格使用emacs-calc,我想计算一列中大于特定值(比如10)的值。

我目前正在使用emacs-calc进行计算,但如果emacs-lisp中有解决方案,那将非常受欢迎!

我知道vcount会计算向量中的值的数量,但是会计算该向量中的所有值。我怎样才能添加一个条件,以便只有值>算了10个?

换句话说,我想要一个在这种情况下会返回2的mysterious_function:

mysterious_function([2,14,11,3,9,1])

4 个答案:

答案 0 :(得分:4)

  

如何添加条件以便只显示值>算了10个?

     

换句话说,我想要一个在这种情况下会返回2的mysterious_function:

     
    

mysterious_function([2,14,10,3,9,1])

  

呃,你在该列表中只有一个值大于10 - 你的意思是> = 10?

无论如何,我不知道org-mode电子表格,但这里是如何在Emacs Lisp中做到的:

(defun mysterious-function (vector)
  (length
   (remove-if-not #'(lambda (n)
              (>= n 10))
          (append vector nil))))

答案 1 :(得分:4)

坦克全部为您的答案。我找到了一个使用emacs-calc的解决方案,灵感来自choroba的提议。

vcount(map(<if(gt(#1,10), 1, [])>, [15,2,5,13]))

因此,为了处理组织模式电子表格中的列,我可以这样做,例如:

vcount(map(<if(gt(#1,10), 1, [])>, @I..@II))

map函数用于将函数(在这种情况下为匿名函数)应用于向量的每个元素。如果元素大于10,我们放1,否则为空向量。

答案 2 :(得分:3)

您还可以创建一个包含

的附加列
if($2>10,1,string(""))

然后只需在此列上应用vcount

答案 3 :(得分:2)

由于logical operations生成1为真,0为假,我们可以简单地sum测试:

vsum(map(<gt(#1,10)>,@I..@II))