Julia-如何按组聚合多个列
与Julia 1.0合作 我正在尝试按组聚合(在本例中为中间)几个列,并寻找一种在列上循环的方法,而不是显式地编写所有列名。 下面的内容可以工作,但我希望在我有很多列的情况下使用更简洁的语法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].
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个)在您的示例中,您实际上更改了列的名称。但在一般情况下,正如我所写的,只需定义一个自定义函数,您可以通过传递给,在该函数中,您可以轻松控制这些内容。