我正在熟悉 Julia Dataframes 模块。 我还没有找到方法做的一件事是如何以编程方式分配 by() 操作结果的自定义列名称。
例如,我执行以下操作没有问题:
df = DataFrame(grp = rand(["a","b"], 100), x= rand(100), y = rand(100), z=rand(100))
by(df, :grp,result=(:x, :z)=>((x, y),) -> cov(x, y))
给出以下数据框
2×2 DataFrame
│ Row │ grp │ result │
│ │ String │ Float64 │
├─────┼────────┼─────────────┤
│ 1 │ b │ -0.00622699 │
│ 2 │ a │ -0.0303828 │
现在我希望结果的命名取决于代码的其他部分。所以我正在尝试这样做
resultColName="resultBis"
by(df, :grp,resultColName=(:x, :z)=>((x, y),) -> cov(x, y))
这给了我以下内容
2×2 DataFrame
│ Row │ grp │ resultColName │
│ │ String │ Float64 │
├─────┼────────┼───────────────┤
│ 1 │ b │ -0.00622699 │
│ 2 │ a │ -0.0303828 │
这不起作用,因为我希望将结果列命名为“resultBis”。我理解为什么会发生这种情况,但是目前有没有办法提供一个字符串来选择结果列的自定义名称?
我想使用宏可能是处理这个问题的一种方法,我欢迎将其作为答案,但理想情况下我想直接在 DataFrames.jl 中执行此操作。欢迎任何帮助。谢谢
最佳答案
julia> by(df, :grp, (; Symbol(resultColName)=>(:x, :z)=>((x, y),) -> cov(x, y)))
2×2 DataFrame
│ Row │ grp │ resultBis │
│ │ String │ Float64 │
├─────┼────────┼────────────┤
│ 1 │ a │ -0.0110717 │
│ 2 │ b │ 0.0102181 │
说明:
by
接受 NamedTuple
作为第三个参数。
为了以编程方式创建它,我们使用 (; :key => value)
运算符。有关更多信息,请在 Julia 控制台中输入 ?NamedTuple
。
关于dataframe - Julia - dataframe - 如何在 by() 中使用字符串进行自定义输出列命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60229490/