2014-05-22 13 views
2

我有一些數據(來自R課程分配,但這並不重要),我想使用分裂應用組合策略,但我有一些問題。數據在DataFrame上,稱爲結果,每行代表醫院。每列都有關於該醫院的信息,例如姓名,地點,費率等。Julia DataFrames:分裂應用組合策略的問題

我的目標是獲得每個州具有最低「心臟病發病率死亡率」的醫院。

我用一些策略玩耍,並得到使用by功能相關的問題:

best_heart_rate(df) = sort(df, cols = :Mortality)[end,:] 
best_hospitals = by(hospitals, :State, best_heart_rate) 

當時的想法是分裂hospitals數據幀由國家,排序分別由死亡率SubDataFrames,拿最低的國家之一,並在新的數據幀

結合線但是,當我使用這個策略,我得到:

ERROR: no method nrow(SubDataFrame{Array{Int64,1}}) 
in sort at /home/paulo/.julia/v0.3/DataFrames/src/dataframe/sort.jl:311 
in sort at /home/paulo/.julia/v0.3/DataFrames/src/dataframe/sort.jl:296 
in f at none:1 
in based_on at /home/paulo/.julia/v0.3/DataFrames/src/groupeddataframe/grouping.jl:144 
in by at /home/paulo/.julia/v0.3/DataFrames/src/groupeddataframe/grouping.jl:202 

我想nrow函數沒有爲SubDataFrames實現,所以我得到了一個錯誤。所以我用了一個很難看的代碼:

best_heart_rate(df) = (df[sortperm(df[:,:Mortality] , rev=true), :])[1,:] 
best_hospitals = by(hospitals, :State, best_heart_rate) 

似乎工作。但是現在有一個NA問題:我如何從Mortality列中刪除NA的SubDataFrame中的行?有沒有更好的策略來實現我的目標?

回答

3

我想這可能工作,如果我理解正確的話你:

# Let me make up some data about hospitals in states 
hospitals = DataFrame(State=sample(["CA", "MA", "PA"], 10), mortality=rand(10), hospital=split("abcdefghij", "")) 
hospitals[3, :mortality] = NA 

# You can use the indmax function to find the index of the maximum element 
by(hospitals[complete_cases(hospitals), :], :State, df -> df[indmax(df[:mortality]), [:mortality, :hospital]]) 



    State mortality    hospital 
1 CA  0.9469632421111882 j 
2 MA  0.7137144590022733 f 
3 PA  0.8811901895164764 e 
+0

謝謝!這正是我想要的,但是我的DataFrame在'death'行上有'NA'。函數'indmax()'還沒有爲DataFrames實現,所以我仍然得到一個錯誤。 – prcastro

+0

您可以使用'complete_cases'來僅選擇數據框的完整行。我編輯了迴應。數據框應該真的有一個「dropna」。 –