【问题标题】:Sort matrix column in R在R中对矩阵列进行排序
【发布时间】:2016-05-27 14:17:00
【问题描述】:

我有一个矩阵 (x),其中包含以下形式的几列和几行:

2 5 3 6 4
3 6 4 2 5
4 2 5 3 6

我希望按升序对apply(x,2,sort) 进行排序,然后按升序对列中的平均值进行排序。

输出如下所示:

2 2 3 2 3 
3 3 4 5 5
4 6 5 6 6

数据

x <- structure(c(2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 6, 6), .Dim = c(3L, 5L))

【问题讨论】:

  • 你能详细说明later sort columns ascending the average in column.是什么意思
  • 我认为这不是重复的。我必须计算每列的平均值,下一个排序列升序。
  • 您的预期输出仍然没有意义。
  • 哦,非常抱歉,但第一个矩阵不正确,我已更正,感谢您的回答

标签: r sorting


【解决方案1】:

您可以执行以下操作:

A <- matrix(c(2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 2, 3, 4, 6, 6), ncol=5)
B <- apply(A, 2, sort)
C <- B[, order(apply(B, 2, sum), decreasing = FALSE)]

> C
     [,1] [,2] [,3] [,4] [,5]
[1,]    2    2    3    2    4
[2,]    3    3    4    5    6
[3,]    4    6    5    6    6

【讨论】:

    【解决方案2】:

    这是你的矩阵

    mat <- matrix(c(2,5, 3, 6, 4,3 ,6 ,4 ,2 ,6, 4 ,2 ,5, 3, 6), byrow=T, nrow=3, ncol = 5)
    mat
         [,1] [,2] [,3] [,4] [,5] 
    [1,]    2    5    3    6    4
    [2,]    3    6    4    2    6
    [3,]    4    2    5    3    6
    

    按升序对列进行排序

    mat_colsort <- apply(mat,2,sort)
    mat_colsort
         [,1] [,2] [,3] [,4] [,5]
    [1,]    2    2    3    2    4
    [2,]    3    5    4    3    6
    [3,]    4    6    5    6    6
    

    获取列的意思

    avgs <- colMeans(mat_colsort)
    

    求列均值的升序

    neworder <- order(avgs)
    

    适当地重新排列你的矩阵

    sorted_matrix <- mat_colsort[,neworder]
    sorted_matrix
         [,1] [,2] [,3] [,4] [,5]
    [1,]    2    2    3    2    4
    [2,]    3    3    4    5    6
    [3,]    4    6    5    6    6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多