如何将列名作为参数传递给Julia DataFrame?

如何将列名作为参数传递给Julia DataFrame?,dataframe,julia,symbols,Dataframe,Julia,Symbols,考虑下表: julia> using RDatasets, DataFrames julia> anscombe = dataset("datasets","anscombe") 11x8 DataFrame | Row | X1 | X2 | X3 | X4 | Y1 | Y2 | Y3 | Y4 | |-----|----|----|----|----|-------|------|-------|------| | 1 | 10 | 10 | 10 |

考虑下表:

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版本0.5.2。
我应该如何克服这个问题?提前感谢!:)

我衷心感谢@Dan Getz提供的解决方案

丹·盖兹的解决方案!!!下面是正确的方法:

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 │

只需将
f1
定义中的
:字段
替换为
符号(字段)
,并确定
val
字段
的顺序即可。打电话时,你使用问题的相反顺序。@DanGetz谢谢,伙计!!!你救了我一天。我刚刚用你的答案更新了这个问题。谢谢!!如果您将解决方案作为一个答案来编写,并且credit Dan-stackoverflow更喜欢这样做,那就更好了