DataFrames.jl 中唯一值组合汇总表

Dav*_*idt 4 dataframe julia

我经常想在数据表中找到一些分组变量的独特组合。使用 R + dplyr,我的正常工作流程是 combine groupby(data, var1, var2, var3) %>% summarise,它返回一个新表,其中包含var1var2var3、 中的每个唯一值组合对应一行data

在 DataFrames.jl 中执行此操作的惯用方法是什么?

Dav*_*idt 7

在 DataFrames.jl 中,DataFrame 是行的集合。所以这里正确的心智模型是首先只选择你关心的列,然后从该表中获取唯一的行,如

select(data, [:var1, :var2, :var3]) |> unique!
Run Code Online (Sandbox Code Playgroud)

(或者,如果你讨厌管道/喜欢额外的括号:

unique!(select(data, [:var1, :var2, :var3]))
Run Code Online (Sandbox Code Playgroud)

unique!在这里推荐是因为select制作了基础列的副本。或者,您可以使用视图或索引,但这些需要unique(不会改变底层列向量)以免损坏原始数据框:

unique(data[!, [:var1, :var2, :var3]])
unique(view(data, :, [:var1, :var2, :var3]))
Run Code Online (Sandbox Code Playgroud)


Bog*_*ski 5

或者你可以写:

keys(groupby(data, [:var1, :var2, :var3]))
Run Code Online (Sandbox Code Playgroud)

获得唯一分组键的向量。然后,DataFrame如果您愿意,您可以通过以下方式将它们收集到 a :

groupby(data, [:var1, :var2, :var3]) |> keys |> DataFrame
Run Code Online (Sandbox Code Playgroud)