2017-01-22 98 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} 

這最後一個問題。 Julia抱怨說它無法將DataArray{Int64,1}Array{Any,1}進行比較。原始Int陣列不會發生這種情況,因爲它們沒有NA。如DataFrames docs,NA毒藥陣列操作中所述。

注意,下面的代碼工作正常,因爲它沒有NA,所以max返回類型完全規定:

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

你最好的選擇是計算最大值之前,將您DataFrame推諉或清除NA 。按行清除NA的簡單方法是

df3 = DataFrames.na_omit(df)[1] 
+0

是否將'na_omit()'記錄在任何位置?看不到它... – daycaster

+1

不是我所知。 DataFrames不會導出'na_omit'。它仍然在v0.8.5中,儘管未來這可能會改變 –