【问题标题】:Julia DataFrames: Problems with Split-Apply-Combine strategyJulia DataFrames:Split-Apply-Combine 策略的问题
【发布时间】:2014-05-22 12:26:00
【问题描述】:

我有一些数据(来自 R 课程作业,但这没关系)我想使用拆分-应用-组合策略,但我遇到了一些问题。数据位于 DataFrame 上,称为结果,每行代表一家医院。每列都有关于该医院的信息,例如名称、位置、费率等。

我的目标是获得每个州“心脏病发作率死亡率”最低的医院。

我在玩一些策略,但在使用 by 函数时遇到了问题:

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

想法是按状态拆分hospitals 数据帧,按死亡率对每个子数据帧进行排序,得到最低的一个,然后将这些行合并到一个新的数据帧中

但是当我使用这个策略时,我得到了:

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 问题:如何从子数据帧中删除NAMortality 列上的行?有没有更好的策略来实现我的目标?

【问题讨论】:

    标签: julia


    【解决方案1】:

    如果我理解正确的话,我认为这可能会起作用:

    # 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
    

    【讨论】:

    • 谢谢!这正是我想要的,但我的 DataFrame 在mortality 行上有NAs。函数 indmax() 还没有为 DataFrames 实现,所以我仍然得到一个错误。
    • 您可以使用complete_cases 仅选择数据框的完整行。我已经编辑了回复。确实应该有一个 dropna 用于数据帧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    相关资源
    最近更新 更多