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

时间:2011-07-06 13:30:22

标签: r

我正在尝试使用多个列对数据矩阵进行排序,顺便说一下,在这里,我想按顺序排序为excel程序。一旦我按第1列对矩阵进行排序,那么我想保留第1列,然后想要按第2列排序,然后想要保留第1列和第2列,然后想要按第3列对矩阵的其余部分进行排序,

比方说,我的矩阵是dd。想要按顺序从20到34排序。

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

这不起作用,任何人都可以用正确的脚本为我提供建议吗? 非常感谢!

1 个答案:

答案 0 :(得分:1)

也许

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

修改:@DWin指出as.list不是必需的(并且?order的帮助页面有一个非常相似的示例)

编辑2 :如果您希望排序减少,并且需要使用do.call指定多列,则需要在参数列表中包含decreasing=TRUE如上所述,使用c()将其与数据框混为一谈。以下简化示例似乎有效:

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