2017-01-22 67 views
1

DataFrameの列の相違点の最大値を取得しようとするとエラーが発生します。なにが問題ですか?JuliaのDataFrame列の最小値/最大値

using DataFrames 

a = [2,4,10,4,8,8] 
b = [5,9,7,2,8,7] 
c = [2,9,7,6,8,1] 

df = DataFrame(A = a, B = b, C = c) 
df[2,:A] = NA 
df[3,:C] = NA 

ab=df[:A] - df[:B] 
bc=df[:B] - df[:C] 
ac=df[:A] - df[:C] 

df[:max] = max(ab, bc, ac) 

println(df) 

=>とLoadError:MethodError:いいえ方法マッチングisless(:: DataArrays.DataArray {Int64,1} ::配列{でも、1})

df[:max] = max(ab, bc)又はdf[:max] = max(a, b, c)のいずれかの最大を行います期待どおりに動作します。

誰でも何が起こっているのか分かりますか?ありがとうございました!戻り値の型に

答えて

3

ご注意:

julia> typeof(ab) 
DataArrays.DataArray{Int64,1} 

julia> typeof(bc) 
DataArrays.DataArray{Int64,1} 

julia> typeof(ac) 
DataArrays.DataArray{Int64,1} 

julia> typeof(max(ab, bc)) 
Array{Any,1} 

最後のものは問題であること。ジュリアはDataArray{Int64,1}Array{Any,1}を比較できないと訴えています。 NAがないため、元のIntアレイでは発生しません。 DataFrames docsに記載されているように、NAはアレイ操作を汚染します。

maxの戻り値の型が完全に指定されているので、それはNAを持っていないので、次のコードが正常に動作することを確認しますあなたの最良のオプションは、最大値を計算する前に、あなたのDataFrameからNAを転嫁またはパージすることである

df2 = DataFrame(A = a, B = b, C = c) 
df2[:max] = max(a, b, c) 
typeof(df2[:max]) ### DataArrays.DataArray{Int64,1} 

。行ごとにNAをパージする簡単な方法は、行ごとに

+0

です。「na_omit()」はどこに文書化されていますか?それを見ることができませんでした... – daycaster

+1

私の知るところではありません。 'na_omit'は' DataFrames'によってエクスポートされません。それはまだv0.8.5にありますが、それは将来変更される可能性があります –

関連する問題