2017-05-21 80 views
2

考慮下表:如何將列名作爲參數傳遞給Julia DataFrame?

julia> using RDatasets, DataFrames 
julia> anscombe = dataset("datasets","anscombe") 
11x8 DataFrame 
| Row | X1 | X2 | X3 | X4 | Y1 | Y2 | Y3 | Y4 | 
|-----|----|----|----|----|-------|------|-------|------| 
| 1 | 10 | 10 | 10 | 8 | 8.04 | 9.14 | 7.46 | 6.58 | 
| 2 | 8 | 8 | 8 | 8 | 6.95 | 8.14 | 6.77 | 5.76 | 
| 3 | 13 | 13 | 13 | 8 | 7.58 | 8.74 | 12.74 | 7.71 | 
| 4 | 9 | 9 | 9 | 8 | 8.81 | 8.77 | 7.11 | 8.84 | 
| 5 | 11 | 11 | 11 | 8 | 8.33 | 9.26 | 7.81 | 8.47 | 
| 6 | 14 | 14 | 14 | 8 | 9.96 | 8.1 | 8.84 | 7.04 | 
| 7 | 6 | 6 | 6 | 8 | 7.24 | 6.13 | 6.08 | 5.25 | 
| 8 | 4 | 4 | 4 | 19 | 4.26 | 3.1 | 5.39 | 12.5 | 
| 9 | 12 | 12 | 12 | 8 | 10.84 | 9.13 | 8.15 | 5.56 | 
| 10 | 7 | 7 | 7 | 8 | 4.82 | 7.26 | 6.42 | 7.91 | 
| 11 | 5 | 5 | 5 | 8 | 5.68 | 4.74 | 5.73 | 6.89 | 

現在我要定義一個函數f1(., ., .),將採取一個數據幀,值和字段名作爲輸入,並返回對應的匹配字段值的行。

julia> function f1(df, val, field) 
      return df[df[:field] .== val, :] 
     end 

我收到以下錯誤

julia> f1(anscombe, 11, "X1") 
ERROR: KeyError: key :field not found 
in getindex at ./dict.jl:697 [inlined] 
in getindex(::DataFrames.Index, ::Symbol) at /home/username/.julia/v0.5/DataFrames/src/other/index.jl:114 
in getindex at /home/username/.julia/v0.5/DataFrames/src/dataframe/dataframe.jl:228 [inlined] 
in f1(::DataFrames.DataFrame, ::String, ::Int64) at ./REPL[229]:2 

但是以下罰款:

julia> anscombe[anscombe[:X1] .== 11, :] 
1×8 DataFrames.DataFrame 
│ Row │ X1 │ X2 │ X3 │ X4 │ Y1 │ Y2 │ Y3 │ Y4 │ 
├─────┼────┼────┼────┼────┼──────┼──────┼──────┼──────┤ 
│ 1 │ 11 │ 11 │ 11 │ 8 │ 8.33 │ 9.26 │ 7.81 │ 8.47 │ 

僅供參考我使用Julia Version 0.5.2。 我應該如何克服這個問題?提前致謝! :)

+0

只需更換':field'在f1'的'和'符號(場)的定義'並決定val'和'field'的'量級。在打電話時,您在問題中使用相反的順序。 –

+0

@DanGetz謝謝,男人!你救了我的一天。我剛剛用你的解決方案更新了這個問題。非常感謝!! – aroyc

+0

如果您將解決方案編寫爲答案和信用,Dan更好 - stackoverflow更喜歡這種方式 –

回答

3

衷心的感謝@丹·蓋茨爲解決

解丹·蓋茨!這是正確的做法:

julia> function f1(df, row, field) 
     return df[df[Symbol(field)] .== row, :] 
     end 
julia> f1(anscombe, 11, "X1") 
1×8 DataFrames.DataFrame 
│ Row │ X1 │ X2 │ X3 │ X4 │ Y1 │ Y2 │ Y3 │ Y4 │ 
├─────┼────┼────┼────┼────┼──────┼──────┼──────┼──────┤ 
│ 1 │ 11 │ 11 │ 11 │ 8 │ 8.33 │ 9.26 │ 7.81 │ 8.47 │ 
相關問題