(group-by #(select-keys % [:a :b]) m1)
Возвращает карту:
{{:b 2, :a 1} [{:a 1, :c 3, :b 2} {:a 1, :c 4, :b 2}],
{:b 4, :a 1} [{:a 1, :c 3, :b 4} {:a 1, :c 3, :b 4}]}
Чтобы получить в точности указанное вами возвращаемое значение, оберните его в (vec (apply concat ...))
:
(vec (apply concat (group-by #(select-keys % [:a :b]) m1)))
; => as in the question text
Это эквивалентно, но, возможно, красивее:
(->> (group-by #(select-keys % [:a :b]) m1)
(apply concat)
vec)