我的矩阵超过 100列。我想根据第一列,然后是第二列,......等排序矩阵。 我知道对于少量的col,我可以使用order函数这样做:
test2 <- test[order(test[,1],test[,2],test[,3],test[,4], test[,5], test[,6]),]
如果我有100多个col并且我不需要指定1到100 col,是否有一种有效的方法可以做到这一点。也许使用循环或什么?
非常感谢! 伯尼斯
答案 0 :(得分:4)
假设您的矩阵看起来像这样:
@"commentsArray"
当我们想要向函数传递任意数量的参数时,set.seed(47)
x = matrix(rpois(10 * 20, lambda = 1), nrow = 10)
是一个不错的选择;它允许我们将一个参数列表传递给函数。
对于do.call
,我们要传递的每个参数都是矩阵的一列,因此我们需要列出矩阵的列。幸运的是,数据框基本上是这样的,因此我们可以强制使用order
后跟as.data.frame
。
as.list
这为我们提供了一种可以通常方式应用的行排序:
ordering = do.call(what = order, args = as.list(as.data.frame(x)))
注意:以上代码将按所有列排序,优先级为早期列。要通过仅按某些列排序,请在x[ordering, ]
定义中对矩阵进行子集化,然后按上述步骤进行。
ordering