Sorting 按列的内容对Maple数据帧进行排序
我有一个存储在Maple数据框中的数据集,我想按给定列中的值进行排序。我的示例更大,但是数据是这样的,我有两列数据,一列有一些数值,另一列有字符串。例如,假设我有一个数据帧,构造为:Sorting 按列的内容对Maple数据帧进行排序,sorting,dataframe,maple,Sorting,Dataframe,Maple,我有一个存储在Maple数据框中的数据集,我想按给定列中的值进行排序。我的示例更大,但是数据是这样的,我有两列数据,一列有一些数值,另一列有字符串。例如,假设我有一个数据帧,构造为: Mydata := DataFrame(<<2,1,3,0>|<"Red","Blue","Green","Orange">>, columns = [Value,Color] ); Mydata:=DataFrame(,columns=[Value,Color]); 我希望
Mydata := DataFrame(<<2,1,3,0>|<"Red","Blue","Green","Orange">>, columns = [Value,Color] );
Mydata:=DataFrame(,columns=[Value,Color]);
我希望像sort命令这样的命令能够返回相同的数据帧,值列中的数字按升序或降序排序,但是sort命令似乎不支持数据帧。关于如何对其进行排序,您有什么想法吗?您是对的,该命令目前不支持(但它应该支持!)。我通过将DataFrame列(DataSeries)转换为一个向量来解决这个问题,使用output=permutation
选项对向量进行排序,然后根据结果对数据帧进行索引。以您的例子:
Mydata := DataFrame(<<2,1,3,0>|<"Red","Blue","Green","Orange">>, columns = [Value,Color] );
sort( convert( Mydata[Value], Vector ), output = permutation );
DSort( Mydata, ByColumn=Value );
通过此结果索引原始数据帧,然后按值列的升序返回排序后的数据帧:
Mydata[ sort( convert( Mydata[Value], Vector ), output = permutation ), .. ];
Mydata[ [4, 2, 1, 3], .. ];
返回:
[ Value Color ]
[ ]
[4 0 "Orange"]
[ ]
[2 1 "Blue" ]
[ ]
[1 2 "Red" ]
[ ]
[3 3 "Green" ]
[ Value Color ]
[ ]
[4 0 "Orange"]
[ ]
[2 1 "Blue" ]
[ ]
[1 2 "Red" ]
[ ]
[3 3 "Green" ]
也就是说,我需要对数据帧进行多次排序,因此我还创建了一个过程,该过程似乎适用于我的大多数数据集。此过程使用了与使用sort命令类似的方法,但是它不需要任何数据转换,因为它在Maple DataFrame对象本身上工作。为此,我需要设置kernelopts(opaquemodules=false)
,以便直接使用内部DataFrame数据对象(您也可以对中间矩阵和向量进行大量转换,但这种方法限制了创建的重复内部数据量):
返回:
[ Value Color ]
[ ]
[4 0 "Orange"]
[ ]
[2 1 "Blue" ]
[ ]
[1 2 "Red" ]
[ ]
[3 3 "Green" ]
[ Value Color ]
[ ]
[4 0 "Orange"]
[ ]
[2 1 "Blue" ]
[ ]
[1 2 "Red" ]
[ ]
[3 3 "Green" ]
这也适用于字符串,因此DSort(Mydata,ByColumn=Color)代码>应该可以工作
[ Value Color ]
[ ]
[2 1 "Blue" ]
[ ]
[3 3 "Green" ]
[ ]
[4 0 "Orange"]
[ ]
[1 2 "Red" ]
在这个过程中,我将附加参数传递给sort
命令,这意味着您还可以添加升序或降序选项,以便执行DSort(Mydata,ByColumn=Value,`>`)
以降序“值”顺序返回数据帧(不过这似乎对字符串不太合适)