Условный подсчет элементов в столбце электронной таблицы в режиме орг.
Я использую 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))