我有一堆分组数据框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