将Julia中的分组DF与浮点数和字符串组合



我有一堆分组数据框gdf,我想结合。我想将GDF与平均值var1 (Float)和var2的第一个元素(String)结合起来。

我试着

combine(gdf, :var1 .=> mean, :var2 .=> first(:var2))

但得到错误ERROR: MethodError: no method matching iterate(::Symbol)我也试过first(:var2, 1)

谢谢你的帮助。

使用DataFrames.jl:

julia> using DataFrames
julia> using Statistics
julia> df = DataFrame(id=[1,2,1,2,1,2], var1=1.5:1:6.5, var2=string.(1:6))
6×3 DataFrame
Row │ id     var1     var2
│ Int64  Float64  String
─────┼────────────────────────
1 │     1      1.5  1
2 │     2      2.5  2
3 │     1      3.5  3
4 │     2      4.5  4
5 │     1      5.5  5
6 │     2      6.5  6
julia> gdf = groupby(df, :id)
GroupedDataFrame with 2 groups based on key: id
First Group (3 rows): id = 1
Row │ id     var1     var2
│ Int64  Float64  String
─────┼────────────────────────
1 │     1      1.5  1
2 │     1      3.5  3
3 │     1      5.5  5
⋮
Last Group (3 rows): id = 2
Row │ id     var1     var2
│ Int64  Float64  String
─────┼────────────────────────
1 │     2      2.5  2
2 │     2      4.5  4
3 │     2      6.5  6
julia> combine(gdf, :var1 => mean, :var2 => first)
2×3 DataFrame
Row │ id     var1_mean  var2_first
│ Int64  Float64    String
─────┼──────────────────────────────
1 │     1        3.5  1
2 │     2        4.5  2

(不需要.=>之前,也不需要显式地传递参数给first)

如果您希望使用赋值样式(而不是=>对的函数样式),请使用DataFramesMeta.jl:

julia> using DataFramesMeta
julia> @combine(gdf, :var1_mean=mean(:var1), :var2_first=first(:var2))
2×3 DataFrame
Row │ id     var1_mean  var2_first
│ Int64  Float64    String
─────┼──────────────────────────────
1 │     1        3.5  1
2 │     2        4.5  2