Julia-如何按组聚合多个列

Julia-如何按组聚合多个列,julia,aggregate,Julia,Aggregate,与Julia 1.0合作 我正在尝试按组聚合(在本例中为中间)几个列,并寻找一种在列上循环的方法,而不是显式地编写所有列名。 下面的内容可以工作,但我希望在我有很多列的情况下使用更简洁的语法 using DataFrames, Statistics dd=DataFrame(A=["aa";"aa";"bb";"bb"], B=[1.0;2.0;3.0;4.0], C=[5.0;5.0;10.0;10.0]) by(dd, :A, df -> DataFrame(bm = df[:B].

与Julia 1.0合作

我正在尝试按组聚合(在本例中为中间)几个列,并寻找一种在列上循环的方法,而不是显式地编写所有列名。 下面的内容可以工作,但我希望在我有很多列的情况下使用更简洁的语法

using DataFrames, Statistics
dd=DataFrame(A=["aa";"aa";"bb";"bb"], B=[1.0;2.0;3.0;4.0], C=[5.0;5.0;10.0;10.0])

by(dd, :A, df -> DataFrame(bm = df[:B].-mean(df[:B]), cm = df[:C].-mean(df[:C])))

有没有一种方法可以循环使用[:B,:C]而不是分别为每个语句编写语句?

您可以使用
聚合

julia> centered(col) = col .- mean(col)
centered (generic function with 1 method)

julia> aggregate(dd, :A, centered)
4×3 DataFrame
│ Row │ A      │ B_centered │ C_centered │
│     │ String │ Float64    │ Float64    │
├─────┼────────┼────────────┼────────────┤
│ 1   │ aa     │ -0.5       │ 0.0        │
│ 2   │ aa     │ 0.5        │ 0.0        │
│ 3   │ bb     │ -0.5       │ 0.0        │
│ 4   │ bb     │ 0.5        │ 0.0        │

请注意,函数名用作后缀。如果您需要更多自定义后缀,请使用
by
并向其传递一个更奇特的第三个参数,该参数迭代传递的列,并为它们提供适当的名称。

谢谢,这很有帮助,但我更想寻找一个版本,其中列将保持其原始名称,并且我还可以传递我要聚合的列列表(例如,将函数应用于100个变量中的30个)在您的示例中,您实际上更改了列的名称。但在一般情况下,正如我所写的,只需定义一个自定义函数,您可以通过传递给
,在该函数中,您可以轻松控制这些内容。