以下のデータを「ピボット」しようとしていますが、これを Excel で試してもうまくいかないようです。ロジックが正しいかどうかはわかりません。基本的に、データセット a をデータセット b に変換する必要があります。
あ
日付 メダル VALUE1 VALUE2 VALUE3 VALUE4
2013-03-08 シルバー 0 6052 0 0
2013-03-04 ブロンズ 0 0 0 0
2013-03-04 ブロンズ 0 0 0 0
2013-03-04 ブロンズ 0 0 0 0
2013-03-04 ブロンズ 0 1437 0 0
2013-03-01 ブロンズ 0 0 240 0
2013-03-01 シルバー 0 0 0 0
2013-03-01 ブロンズ 0 0 0 0
2013-03-01 ブロンズ 0 173 0 0
2013-03-08 シルバー 0 0 0 271
2013-03-04 シルバー 0 2547 0 0
2013-03-04 ブロンズ 0 495 0 0
2013-03-04 ゴールド 279 0 0 0
2013-03-02 シルバー 0 0 0 0
2013-03-01 ブロンズ 0 0 0 0
2013-03-01 シルバー 0 0 0 0
2013-03-01 ブロンズ 0 0 0 0
2013-03-01 ブロンズ 0 20 0 0
2013-03-03 シルバー 0 0 0 0
B
メダル VALUE1 VALUE2 VALUE3 VALUE4
ブロンズ 0 2125 240 0
ゴールド 279 0 0 0
シルバー 0 8599 0 271
したがって、基本的には、MEDAL でグループ化し、MEDAL フィルターに基づいて各値列を合計しようとしています (MEDAL は可変で、PURPLE、BLUE などの可能性があります)。以下の試みは完全に間違っています。以前のコードを再利用しているため、おそらく丸いペグの四角い穴の領域ですが、論理的にもどうすればいいのかわかりません... :(
どんな助けやアドバイスも大歓迎です
(defn- create-summary [data]
(->> data
(group-by :MEDAL)
vals
(map
(fn [recs]
(let [a (fn [b] (+ (filter #(= b(:MEDAL%)) recs)recs))]
{:MEDAL (:MEDAL (first recs))
:VALUE1sum (a :MEDAL)
:VALUE2sum (a :MEDAL)
:VALUE3sum (a :MEDAL)
:VALUE4sum (a :MEDAL)
})))
))