【问题标题】:R matrix order by multiple columns (more than 100 columns)R矩阵按多列排序(超过100列)
【发布时间】:2015-12-28 22:41:59
【问题描述】:

我有一个 矩阵,它有超过 100 列。我想根据第一个 col 对矩阵进行 排序,然后是 sec col, ... 等。 我知道对于少量的 col,我可以使用 order 函数这样做:

test2 <- test[order(test[,1],test[,2],test[,3],test[,4], test[,5], test[,6]),]

如果我有超过 100 列并且我不需要指定 1 到 100 列,有没有一种有效的方法来做到这一点。也许使用循环或其他东西?

非常感谢! 伯尼斯

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    假设您的矩阵如下所示:

    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 定义中对矩阵进行子集化,然后按上述方法进行操作。

    # order by even columns
    ordering = do.call(
        what = order, args = as.list(as.data.frame(x[, seq(2, ncol(x), by = 2)]))
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      相关资源
      最近更新 更多