对于任意列数的矩阵或数据框x
,我想做到这一点:
x=x[order(x[,1], x[,2], ..., x[,ncol(x)]),]
也就是说,我想按第一列排序,然后按第二列排序,......,最后按最后一列排序。在这里有关于排序的详细讨论,但似乎没有解决方案。以下是我的解决方案,虽然它违反了fortune(106)
:
sortarray = function(x){
k = ncol(x)
com = paste("x = x[order(x[,", paste(1:k, collapse = "],x[,"), "]),]", sep = "")
eval(parse(text = com))
return(x)}
x = sortarray(x)
这个方法似乎可以正常工作,但有没有更简洁的方法?
去重说明编辑:这个问题与建议的重复问题有一个重要的区别(至少对我来说)。之前的问题处理的情况是你明确声明要按哪些列排序。而在我的情况下,我希望自动选择列(具体来说,是全部列),而不是我必须在排序命令中输入每个列名。下面的答案解决了我的问题,而不像之前问题的任何答案。