我想按多列对数据框进行排序。这是我制作的一个简单的数据框。如何按不同的排序类型对每一列进行排序?
using DataFrames
DataFrame(b = ("Hi", "Med", "Hi", "Low"),
levels = ("Med", "Hi", "Low"),
x = ("A", "E", "I", "O"), y = (6, 3, 7, 2),
z = (2, 1, 1, 2))
Run Code Online (Sandbox Code Playgroud)
从这里移植过来。
与 R 不同,Julia 的 DataFrame 构造函数期望将每一列中的值作为向量而不是元组传递:so DataFrame(b = ["Hi", "Med", "Hi", "Low"],&tc。
此外,DataFrames 不希望以 R 的方式给出明确的级别。相反,可选的关键字参数categorical可用并且应该设置为“一个 Bool 向量,指示哪些列应该转换为 CategoricalVector”。
(在添加 DataFrames 和 CategoricalArrays 包之后)
julia> using DataFrames, CategoricalArrays
julia> xyorz = categorical(rand(("x","y","z"), 5))
5-element CategoricalArray{String,1,UInt32}:
"z"
"y"
"x"
"x"
"z"
julia> smallints = rand(1:4, 5)
5-element Array{Int64,1}:
2
3
2
1
1
julia> df = DataFrame(A = 1:5, B = xyorz, C = smallints)
5×3 DataFrame
? Row ? A ? B ? C ?
? ? Int64 ? Categorical… ? Int64 ?
??????????????????????????????????????
? 1 ? 1 ? z ? 2 ?
? 2 ? 2 ? y ? 3 ?
? 3 ? 3 ? x ? 2 ?
? 4 ? 4 ? x ? 1 ?
? 5 ? 5 ? z ? 1 ?
Run Code Online (Sandbox Code Playgroud)
现在,你想排序什么?A上(B然后C)?[4, 3, 2, 5, 1]
julia> sort(df, (:B, :C))
5×3 DataFrame
? Row ? A ? B ? C ?
? ? Int64 ? Categorical… ? Int64 ?
??????????????????????????????????????
? 1 ? 4 ? x ? 1 ?
? 2 ? 3 ? x ? 2 ?
? 3 ? 2 ? y ? 3 ?
? 4 ? 5 ? z ? 1 ?
? 5 ? 1 ? z ? 2 ?
julia> sort(df, (:B, :C)).A
5-element Array{Int64,1}:
4
3
2
5
1
Run Code Online (Sandbox Code Playgroud)
这是一个开始的好地方http://juliadata.github.io/DataFrames.jl/stable/