Julia-dataframe-如何在by()中使用字符串进行自定义输出列命名
我越来越熟悉Julia Dataframes模块。 有一件事我还没有找到方法,那就是如何以编程方式为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
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))