Julia-如何按组汇总许多列

时间:2018-10-17 22:00:33

标签: 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].-mean(df[:B]), cm = df[:C].-mean(df[:C])))

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

1 个答案:

答案 0 :(得分:3)

您可以使用aggregate

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并为它传递一个更漂亮的第三个参数,该参数在传递的列上进行迭代,并为其指定适当的名称。