Is there a way to pass a Vector{Function} like this:
methods = [mean, max]
to DataFrames combine? I was thinking something like this?
df = combine(groupdf, nrow, 3 => methods)
of
df = combine(groupdf, nrow, 3 => methods...)
try broadcasting over the functions with .=> maybe?
brilliant, so intuitive, thanks⦠I love Julia 
any suggestions for programmatically applying multiple methods to multiple columns?
for
methods = [mean, maximum]
and
cols = [:x, :y]
df = combine(groupdf, cols .=> methods) gives results of x_mean  and y_maximum
df = combine(groupdf, cols[1] .=> methods) gives results of x_mean  and x_maximum
df = combine(groupdf, cols[2] .=> methods) gives results of y_mean  and y_maximum
but I canβt seem to find a solution that gives x_mean , x_maximum, y_mean , y_maximum
the third solution here worked:
 combine(gdf, nrow, [n => f for n in cols for f in methods])
make a poor manβs cartesian product
julia> df = DataFrame([:a => [1,2,3], :b => [4,5,6]])
3Γ2 DataFrame
 Row β a      b     
     β Int64  Int64 
ββββββΌββββββββββββββ
   1 β     1      4
   2 β     2      5
   3 β     3      6
julia> select(df, repeat([:a, :b], inner=2) .=> repeat([maximum, minimum], outer=2))
3Γ4 DataFrame
 Row β a_maximum  a_minimum  b_maximum  b_minimum 
     β Int64      Int64      Int64      Int64     
ββββββΌββββββββββββββββββββββββββββββββββββββββββββ
   1 β         3          1          6          4
   2 β         3          1          6          4
   3 β         3          1          6          4
the generator you found looks good too!
The simplest way is to change methods = [mean, maximum] for methods = [mean maximum] (no comma). Then, if you run combine(groupdf, cols .=> methods)  you get x_mean , x_maximum , y_mean , y_maximum.
This is fantastic⦠are you able to explain why a Vector of functions needs to be iterated over while a Matrix of functions does not?
You can see more about it here:
Just in case, that blog is written by @bkamins, who is one of the developers of DataFrames. Itβs really helpful.
See:
julia> ["r1", "r2", "r3"] .=> ["c1" "c2"]
3Γ2 Matrix{Pair{String, String}}:
 "r1"=>"c1"  "r1"=>"c2"
 "r2"=>"c1"  "r2"=>"c2"
 "r3"=>"c1"  "r3"=>"c2"