我有一些数据(来自R课程作业,但这并不重要)我想使用拆分 - 应用 - 合并策略,但我遇到了一些问题。数据位于DataFrame上,称为结果,每行代表一个医院。每列都有关于该医院的信息,如姓名,地点,费率等。
我的目标是通过心脏病发作率获得最低"死亡率的医院"每个州。
我正在玩一些策略,并使用by
函数遇到问题:
best_heart_rate(df) = sort(df, cols = :Mortality)[end,:]
best_hospitals = by(hospitals, :State, best_heart_rate)
我们的想法是按状态拆分hospitals
DataFrame,按死亡率对每个SubDataFrame进行排序,获取最低的一个,然后将这些行合并到一个新的DataFrame中
但是当我使用这个策略时,我得到了:
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
我认为没有为SubDataFrames实现nrow
函数,所以我收到了一个错误。所以我使用了一个更糟糕的代码:
best_heart_rate(df) = (df[sortperm(df[:,:Mortality] , rev=true), :])[1,:]
best_hospitals = by(hospitals, :State, best_heart_rate)
似乎工作。但现在存在NA
问题:如何从NA
列上Mortality
的SubDataFrame中删除行?是否有更好的策略来实现我的目标?
答案 0 :(得分: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