Условный подсчет элементов в столбце электронной таблицы в режиме орг.

Я использую emacs-calc через электронную таблицу в режиме org, и я хотел бы посчитать количество значений в столбце, которые превышают определенное значение (скажем, 10).

В настоящее время я использую emacs-calc для вычислений, но если есть решение в emacs-lisp, это было бы очень кстати!

Я знаю, что vcount будет подсчитывать количество значений в векторе, но это будет считать все значения в этом векторе. Как добавить условие, чтобы учитывались только значения> 10?

Другими словами, я хотел бы получить mysterious_function, которая бы возвращала 2 в таком случае:

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

4 ответа

Решение

Танки все за ваши ответы. Я нашел решение, используя emacs-calc, вдохновленное предложением Чоробы.

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

Итак, для обработки столбца в электронной таблице в режиме org, я могу сделать, например:

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

Функция map используется для применения функции (в данном случае анонимной) к каждому элементу вектора. Если элемент больше 10, мы ставим 1, иначе пустой вектор.

Как добавить условие, чтобы учитывались только значения> 10?

Другими словами, я хотел бы получить mysterious_function, которая бы возвращала 2 в таком случае:

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

Э, у вас есть только одно значение больше 10 в этом списке - вы имеете в виду>= 10?

В любом случае, я не знаю о таблицах в режиме org, но вот как это сделать в Emacs Lisp:

(defun таинственная функция (вектор)
  (длина
   (удалить, если не #'(лямбда (n)
              (>= n 10))
          (добавить вектор ноль))))

Вы также можете создать дополнительный столбец, который будет содержать

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

А потом просто подать заявку vcount на этой колонке.

Поскольку логические операции выдают 1 для true и 0 для false, мы можем просто суммировать тест:

vsum(map(<gt(#1,10)>,@I..@II))
Другие вопросы по тегам