我正在尝试使用多个列对数据矩阵进行排序,顺便说一下,在这里,我想按顺序排序为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)), ]
}
这不起作用,任何人都可以用正确的脚本为我提供建议吗? 非常感谢!
答案 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