我经常想在数据表中找到一些分组变量的独特组合。使用 R + dplyr,我的正常工作流程是 combine groupby(data, var1, var2, var3) %>% summarise,它返回一个新表,其中包含var1、var2、var3、 中的每个唯一值组合对应一行data。
在 DataFrames.jl 中执行此操作的惯用方法是什么?
在 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)
或者你可以写:
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)