Julia-dataframe-如何在by()中使用字符串进行自定义输出列命名

Julia-dataframe-如何在by()中使用字符串进行自定义输出列命名,dataframe,julia,Dataframe,Julia,我越来越熟悉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

我越来越熟悉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
接受名为tuple的
作为第三个参数。

为了以编程方式创建它,我们使用
(;:key=>value)
操作符。有关更多信息,请在控制台中键入
?NamedTuple

欢迎来到StackOverflow!做
重命名,请参阅,能为你工作吗?@JKHA,谢谢!我认为这绝对是解决问题的方法。想知道是否有更直接的方法。例如,在一个非常通用的框架中,我不知道会得到多少结果列。在这种情况下,我可以跳过命名结果列并使用重命名!在由()生成的默认列名上。我希望有一个明确的方式。但是Julia还年轻:)作为参考,如果有人想知道如何拥有多个函数和名称,它们都在同一个名称组中:
by(df,:grp,(;Symbol(resultColName)=>(:x,:z)=>((x,y),)->cov(x,y),Symbol(resultColName2)=>(:x,:y)=>((x,y),)->cov(x,y))