2017-11-23 20 views
0

さらなる操作のためにDataFrameに変換する前にreduceを実行する必要があるため、JSONファイルから配列を読み込んでいます。引数のために、私は1つ以上のキー(たとえば、AとC)によって配列が、グループを実行することができれば、大幅に簡素化されるだろう行ってい減らす、のは、これはそれが今Juliaの辞書の配列を「グループ化」することはできますか?

a = [Dict("A" => 1, "B" => 1, "C" => "a") 
    Dict("A" => 1, "B" => 2, "C" => "b") 
    Dict("A" => 2, "B" => 1, "C" => "b") 
    Dict("A" => 2, "B" => 2, "C" => "a")] 

あるとしましょう各グループで簡単に減らし、後で行をDictの大きな配列に再結合すると、簡単にDataFrameに変わります。

これをグループに分割し、個々のグループをマトリックスに分割し、減らしてください減った行列を(Sub?)DataFrameに戻してください(名前のためにいくつかの難易度があります)。そして、すべてがうまく1つの巨人DataFrameに来ることを願ってください。

これを行うのが簡単かつ実用的な方法はありますか?

EDIT誰かが私がQuery.jlを見て示唆する前に、私は後続の行の特定のペアを潰してるので、私が実行している削減は、より少ない行で、配列を返します。もし私がQuery.jlでこのようなことができるのであれば、誰かがどのようにヒントしているのでしょうか?ドキュメンテーションは、単一の値を返さないものと "集約する"方法がはっきりしていないからです。例:

A B C 
----------- 
1  a 
2 1 a 
3  b 
4 2 b 

べきグループ「C」によると、削減、明確にするために

A B C 
----------- 
1 1 a 
3 2 b 

のようなものの中に、そのテーブルを回すが働いている、私だけかどうかを確認する必要がないため、それを単純化したいです行は、前の行の同じグループに属しています。

答えて

0

まだ実験中ですが、SplitApplyCombine.jlがこのトリックを行う可能性があります。任意のキー機能を使用して任意のイテラブルをグループ化し、最後にキー→グループを指定することができます。

julia> ## Pkg.clone("https://github.com/JuliaData/SplitApplyCombine.jl.git") 

julia> using SplitApplyCombine 

julia> group(x->x["C"], a) 
Dict{Any,Array{Dict{String,Any},1}} with 2 entries: 
    "b" => Dict{String,Any}[Dict{String,Any}(Pair{String,Any}("B", 2),Pair{String,Any}("A", 1),Pair{String,Any}("C", "b")), Dict{String,Any}(Pair{String,Any}("… 
    "a" => Dict{String,Any}[Dict{String,Any}(Pair{String,Any}("B", 1),Pair{String,Any}("A", 1),Pair{String,Any}("C", "a")), Dict{String,Any}(Pair{String,Any}("… 

次にあなたが標準[map]reduce操作(ここでは配管用SAC @_マクロを使用して)使用することができます。

julia> @_ a |> group(x->x["C"], _) |> values(_) |> reduce(vcat, _) 
4-element Array{Dict{String,Any},1}: 
Dict{String,Any}(Pair{String,Any}("B", 2),Pair{String,Any}("A", 1),Pair{String,Any}("C", "b")) 
Dict{String,Any}(Pair{String,Any}("B", 1),Pair{String,Any}("A", 2),Pair{String,Any}("C", "b")) 
Dict{String,Any}(Pair{String,Any}("B", 1),Pair{String,Any}("A", 1),Pair{String,Any}("C", "a")) 
Dict{String,Any}(Pair{String,Any}("B", 2),Pair{String,Any}("A", 2),Pair{String,Any}("C", "a")) 
関連する問題