Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 按列的内容对Maple数据帧进行排序_Sorting_Dataframe_Maple - Fatal编程技术网

Sorting 按列的内容对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]); 我希望

我有一个存储在Maple数据框中的数据集,我想按给定列中的值进行排序。我的示例更大,但是数据是这样的,我有两列数据,一列有一些数值,另一列有字符串。例如,假设我有一个数据帧,构造为:

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,`>`)
以降序“值”顺序返回数据帧(不过这似乎对字符串不太合适)