2016-04-19 9 views
2

私は、各行が特定のテストケースに関連付けられた時系列データを持つテーブルを作成しようとしています。Julia dataframeここで、列は配列の配列ですか?

julia> df = DataFrame(var1 = Int64[], var2 = Int64[], ts = Array{Array{Int64, 1}, 1}) 
0x3 DataFrames.DataFrame 

私はデータフレームを作成することができます。各var1var2のペアには、関連する時系列があります。

私は私が行くための最善の方法は何

julia> push!(df, [1, 2, [3,4,5]]) 
ERROR: ArgumentError: Length of iterable does not match DataFrame column count. 
    in push! at /Users/stro/.julia/v0.4/DataFrames/src/dataframe/dataframe.jl:871 

julia> push!(df, (1, 2, [3,4,5])) 
ERROR: ArgumentError: Error adding [3,4,5] to column :ts. Possible type mis-match. 
in push! at /Users/stro/.julia/v0.4/DataFrames/src/dataframe/dataframe.jl:883 

を試してみたループ内のデータを生成したいとpush!

を使用して、このデータフレームに追加しますこれについて?私の意図したアプローチは正しい道であろうか?

答えて

5

誤って実際のベクトルの代わりにベクトルの型を入れたことがあります。この宣言は動作します:

df = DataFrame(var1 = Int64[], var2 = Int64[], ts = Array{Int64, 1}[]) 

なおタイプと実際のベクトルであるArray{Int64, 1}[]のタイプであるArray{Array{Int64, 1}, 1}からの変化、、、。

は、その後の事は働く:あなたの他の例は、まだ[1, 2, [3,4,5]]を使用して動作しません

julia> push!(df, (1, 2, [3,4,5])) 

julia> df 
1x3 DataFrames.DataFrame 
│ Row │ var1 │ var2 │ ts  │ 
┝━━━━━┿━━━━━━┿━━━━━━┿━━━━━━━━━┥ 
│ 1 │ 1 │ 2 │ [3,4,5] │ 

注意を。これは、Juliaの配列構文における奇妙な点は、コンマ,が連結を意味するため、実際には[1, 2, [3,4,5]][1, 2, 3, 4, 5]を意味するためです。この動作は奇妙でJulia 0.5で修正されますが、後方互換性のために0.4で保存されます。

+1

説明のために謝辞、衡陽。私はそれを見ていることが明らかになった:)また、 '、'動作を明確にしてくれてありがとう。私が正しく理解していれば、 '(1,2、[3,4,5])'はこれらの値を持つタプルリテラルを作成します。 '[1、2、[3,4,5]]の* intent *は' x [1] = 1、x [2] = 2、x [3] = [3、 4,5] 'になりますが、'、 'の連結動作に起因しません。 – strobot

関連する問題