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

发布于 2025-01-03 15:12:32 字数 305 浏览 0 评论 0原文

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

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

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

换句话说,我想要一个在这种情况下返回 2 的神秘函数:

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

I'm using emacs-calc through org-mode spreadsheet and I would like to count the number of values, in a column, that are greater than a specific value (say 10).

I'm currently using emacs-calc for the computations, but if there is a solution in emacs-lisp, it would be very welcome!

I know that vcount would count the number of values in a vector, but that would count all the values in that vector. How could I add a condition so that only values > 10 are counted?

In other words, I would like a mysterious_function that would return 2 in such a case:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

阳光的暖冬 2025-01-10 15:12:33

我如何添加一个条件,以便只有值> > 10个算了吗?

换句话说,我想要一个在这种情况下返回 2 的神秘函数:

<块引用>

神秘函数([2,14,10,3,9,1])

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

不管怎样,我不知道组织模式电子表格,但以下是如何在 Emacs Lisp 中做到这一点:

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

How could I add a condition so that only values > 10 are counted?

In other words, I would like a mysterious_function that would return 2 in such a case:

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

Er, you only have one value greater than 10 in that list - do you mean >= 10?

Anyway, I don't know about org-mode spreadsheets, but here is how to do it in Emacs Lisp:

(defun mysterious-function (vector)
  (length
   (remove-if-not #'(lambda (n)
              (>= n 10))
          (append vector nil))))
极度宠爱 2025-01-10 15:12:33

我找到了一个解决方案,使用 emacs-calc,灵感来自于 choroba 的提案

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

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

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

使用映射函数将函数(在这种情况下是匿名函数)应用于向量的每个元素。如果元素大于 10,我们输入 1,否则输入空向量。

I found a solution, using emacs-calc, inspired by choroba's proposal.

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

So, for treating a column in org-mode spreadsheet, I can do, for example:

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

The map function is used to apply a function (an anonymous one, in that case) to each element of a vector. If the element is greater than 10, we put a 1, otherwise an empty vector.

寄离 2025-01-10 15:12:33

您还可以创建一个包含的附加列

if($2>10,1,string(""))

,然后只需在此列上应用 vcount 即可。

You can also create an additional column that will contain

if($2>10,1,string(""))

And then simply apply vcount on this column.

苯莒 2025-01-10 15:12:33

由于 逻辑运算 产生 1 表示 true 0 表示 false,我们可以简单地 总结测试:

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

Since the logical operations produce 1 for true and 0 for false, we can simply sum the test:

vsum(map(<gt(#1,10)>,@I..@II))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文