使用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]而不是分别为每个语句编写语句?
答案 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
并为它传递一个更漂亮的第三个参数,该参数在传递的列上进行迭代,并为其指定适当的名称。