Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.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
R 关于顺序排序/顺序的快速问题_R_Sorting - Fatal编程技术网

R 关于顺序排序/顺序的快速问题

R 关于顺序排序/顺序的快速问题,r,sorting,R,Sorting,我正在尝试对具有多个列的数据矩阵进行排序。在这里,我想在Excel中按顺序排序。一旦我按第一列对矩阵排序,我想保留第一列,然后按第二列排序,然后保留第一列和第二列,然后按第三列对矩阵的其余部分排序,依此类推 例如,如果我的矩阵是dd,我想按顺序从20到34排序: L <- 34 for(init in 20:L){ dd <- dd[with(dd, order(dd[,init],decreasing=T)), ] } L也许 ord &l

我正在尝试对具有多个列的数据矩阵进行排序。在这里,我想在Excel中按顺序排序。一旦我按第一列对矩阵排序,我想保留第一列,然后按第二列排序,然后保留第一列和第二列,然后按第三列对矩阵的其余部分排序,依此类推

例如,如果我的矩阵是
dd
,我想按顺序从20到34排序:

L <- 34
for(init in 20:L){
    dd <- dd[with(dd, order(dd[,init],decreasing=T)), ]
                }
L也许

ord <- do.call(order,c(dd[,20:34],decreasing=TRUE))
dd <- dd[ord,]

你的意思是你想在数据帧的第20列到第34列之间排序吗?@Dirk Eddelbuettel:我想不太可能,因为OP想要按很多列排序(如果我的解释正确的话),手工排序会有点乏味。是的,ben的评论是正确的-我正在尝试以excel的形式进行操作-按第一列排序,使用排序矩阵,然后按第二列排序,使用排序矩阵,然后按第三列排序,在excel中,可以选择按+然后按+然后按,我想对一个有64列的矩阵做20到34列)如果你有一些数据在里面会更清楚一些-例如,我猜你的“矩阵”实际上是一个数据。框架。。。下面的答案不适用于矩阵…我测试了它。。。您不需要
as.list
。在帮助页面上的“排序数据帧”标题下有一个示例,当我使用递减=T进行排序时,
order
,do.call(order(递减=T),dd[,20:34])不起作用。如何在do.call中使用递减选项进行修改?无论何时进行排序,它都应该递减。因为花时间解决某人的问题(并首先找出他们问题的确切含义)并让他们说(1)你的解决方案对他们不起作用[没有显示可复制的示例]和(2) 他们找到了一个不同的解决方案,但没有具体说明他们做了什么(如果您能够记录您的
doBy
解决方案,这将非常有帮助,对我和阅读此问题的未来用户都有好处)…@chuck-当试图提供帮助的人必须通过心理训练来了解你在说什么时,挫折感往往会出现。提供一个清晰的、可重复的例子是获得快速有效帮助的第一条途径。此外,如果你已经找到了更好的替代解决方案,那么我相信ans发帖!六个月、十二个月、十八个月后找到此帖的人可能对这两种解决方案都感兴趣。
X <- rev(expand.grid(x=1:2,y=1:3,z=1:4))
> head(X)
  z y x
1 1 1 1
2 1 1 2
3 1 2 1
4 1 2 2
5 1 3 1
6 1 3 2
ord <- do.call(order,c(X,decreasing=TRUE))
head(X[ord,])
head(X[ord,])
   z y x
24 4 3 2
23 4 3 1
22 4 2 2
21 4 2 1
20 4 1 2
19 4 1 1