Clojure的sumifs酒店

Clojure的sumifs酒店,clojure,sumifs,Clojure,Sumifs,我正试图用Clojure中的Excel做一个sumifs。我有一个csv文件,它的列大小按大、中、小分类。还有一个栏目叫做收入。我想做的是按规模计算每家公司的总收入 这就是我迄今为止所尝试的: (math sum ($for [Size] [row (vals input-data) :let [Size (:Size row)]] (+ (:Revenue row) 0 ))) 这是Clojure的一个分支。假设您有一系列表示可用数据的地图,我建议如下: (defn

我正试图用Clojure中的Excel做一个sumifs。我有一个csv文件,它的列大小按大、中、小分类。还有一个栏目叫做收入。我想做的是按规模计算每家公司的总收入

这就是我迄今为止所尝试的:

(math
  sum
    ($for [Size] [row (vals input-data) :let [Size (:Size row)]]
      (+ (:Revenue row) 0 )))

这是Clojure的一个分支。

假设您有一系列表示可用数据的地图,我建议如下:

(defn revenue-sum [props]
  (reduce (fn [acc {:keys [size revenue]}]
            (update-in acc
                       [size]
                       #(if % (+ revenue %) revenue)))
          {}
          props))

以下是使用标准Clojure方法进行sumif的常规方法:

defn sumif[pred coll] reduce+过滤器pred coll 以下是使用sumif对0到9之间的所有奇数求和的示例:

(sumif odd? (range 10)) ; => 25
更新: 但如果您希望按大小聚合数据,则可以将从应用到分组聚合的结果:

(defn aggregate-by [group-key sum-key data]
  (fmap #(reduce + (map sum-key %))
        (group-by group-key data)))
以下是一个例子:

(defn aggregate-by [group-key sum-key data]
  (fmap #(reduce + (map sum-key %))
        (group-by group-key data)))

你用的是什么叉子?美元是干什么的?什么是数学?总和是多少?这些不是标准的Clojure函数,也不是Clojure的标准分支。$for与for语句类似,只是输出是矩阵格式。标准clojure输出的代码是什么。我可以减少列数,也可以求和列数,但不能求和。我识别VAL和+。什么是矩阵格式?