如何在Julia中按多列对数据帧进行排序
我想按多列对数据帧进行排序。这是我制作的一个简单的数据框。如何按不同的排序类型对每个列进行排序如何在Julia中按多列对数据帧进行排序,julia,Julia,我想按多列对数据帧进行排序。这是我制作的一个简单的数据框。如何按不同的排序类型对每个列进行排序 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)) 您的代码正在创建一个包含元组的单行数据帧,因此我更正了它。
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))
您的代码正在创建一个包含元组的单行数据帧,因此我更正了它。 注意,对于标称变量,通常使用
Symbol
s而不是String
s
using DataFrames
df = DataFrame(b = [:Hi, :Med, :Hi, :Low, :Hi],
x = ["A", "E", "I", "O","A"],
y = [6, 3, 7, 2, 1],
z = [2, 1, 1, 2, 2])
sort(df, [:z,:y])
与R不同,Julia的DataFrame构造函数期望每列中的值作为向量而不是元组传递:因此
DataFrame(b=[“Hi”、“Med”、“Hi”、“Low”],
&tc
此外,DataFrames不希望以R的方式给出显式级别。相反,可选的关键字参数category
可用,应设置为“Bool向量,指示哪些列应转换为CategorialVector”
(添加数据帧和CategoricalArray包后)
现在,您想排序什么?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
这是一个很好的起点Jeffrey,我特别欣赏“从R开始”的方法,这对我(我希望还有其他人)来说是完美的。在上面,帧引用使用了向量
[:z,:y]
来代替元组(:B,:C)
。而我猜这更像是一种“轻微的效率”问题是,在向量上使用元组还有另一个令人信服的原因吗?在DataFrames.jl中,一般的设计是使用向量。在这种情况下,允许使用元组,但不会增加效率,因为在内部它会被转换为向量。另外,Jeffrey Sarnoff暗示,对于标称或序数列,典型的方法是uld应使用分类导航器。
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