分组和数据获取

时间:2013-04-11 14:59:31

标签: clojure

我认为我在clojure中误解了GET - 我试图从另一个数据集中创建1个数据集,从下面的A到B。

一个
ID REGION MIN
10346 GLBL 106
10346 ASPAC 106
10346 NA 106
10346 LATAM 106
10346 EMEA 106
10347 GLBL 32
10347 ASPAC 32
10347 NA 32
10347 LATAM 32
10347 EMEA 32
10349 NA 10
10327 NA
10344 EMEA 8
10342 ASPAC 292
10342 EMEA 292
10348 ASPAC 15
10422 EMEA 37
10438 NA 0


ID EMEA NA ASPAC GLBL LATAM
10346 106 106 106 106 106 10347 32 32 32 32 32
10349 0 10 0 0 0
10327 0 0 0 0 0
10344 8 0 0 0 0
10342 292 0 292 0 0
10348 0 0 15 0 0
10422 37 0 0 0 0
10438 0 0 0 0 0

group by正在工作,但我得到所有区域的空值,我虽然过滤了我可以使用的区域获取该记录中MIN的值并将其映射到新的区域字段 - 任何建议我在这做错了什么?或者我应该使用什么而不是GET?

(defn- create-summary [data]
(->> data

     (group-by :ID
     vals
     (map 
        (fn [recs]
            (let [a (fn [priority](get :MIN (filter #(= priority (:REGION %)) recs)))]
                {:ID (:ID (first recs))
                 :EMEA (a "EMEA")
                 :NA (a "NA")
                 :GLBL (a "GLBL") 
                 :LATAM (a "LATAM")
                 :ASPAC (a "ASPAC")
                 })))

    ))

1 个答案:

答案 0 :(得分:1)

此:

(let [a (fn [priority](get :MIN (filter #(= priority (:REGION %)) recs)))]

应该是

(let [a (fn [priority](get (first (filter #(= priority (:REGION %)) recs)) :MIN))]