【问题标题】:R: Matrix sorting by only part of a columnR:仅按列的一部分进行矩阵排序
【发布时间】:2016-05-08 17:01:53
【问题描述】:

我有一个矩阵,比如说:

c <- c(1,2,3,4,5,0,1,-5,3,1,-3,2,-2,1,2,0,1,0,3,3,5,-5,3,-1,0)
M <- matrix(c, byrow=T, nrow=5)
M 

所以:

M
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    0    1   -5    3    1
[3,]   -3    2   -2    1    2
[4,]    0    1    0    3    3
[5,]    5   -5    3   -1    0

我知道如何按列 [,3] 的绝对值对 M 进行排序(例如):

Ma <- abs(M)
Ms <- M[order(Ma[,3], decreasing = T),]
Ms 

所以:

Ms
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    1   -5    3    1
[2,]    1    2    3    4    5
[3,]    5   -5    3   -1    0
[4,]   -3    2   -2    1    2
[5,]    0    1    0    3    3

但我想要的是M不是按整列[,3]排序的,而是按最后3个绝对值排序的,这样M的前两行就不会改变:

Ms
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    2    3    4    5
[2,]    0    1   -5    3    1
[3,]    5   -5    3   -1    0
[4,]   -3    2   -2    1    2
[5,]    0    1    0    3    3

我找不到简单的方法。有什么想法吗?
谢谢。

【问题讨论】:

  • 嗯,非常感谢!

标签: r sorting matrix


【解决方案1】:

我们可以试试

M[(nrow(M)-2):nrow(M),] <- tail(M,3)[order(tail(Ma[,3],3), decreasing=TRUE),]
M
#      [,1] [,2] [,3] [,4] [,5]
#[1,]    1    2    3    4    5
#[2,]    0    1   -5    3    1
#[3,]    5   -5    3   -1    0
#[4,]   -3    2   -2    1    2
#[5,]    0    1    0    3    3

【讨论】:

    【解决方案2】:
    M[c(1:2,2L+order(abs(M[-1:-2,3L]),decreasing=T)),];
    ##      [,1] [,2] [,3] [,4] [,5]
    ## [1,]    1    2    3    4    5
    ## [2,]    0    1   -5    3    1
    ## [3,]    5   -5    3   -1    0
    ## [4,]   -3    2   -2    1    2
    ## [5,]    0    1    0    3    3
    

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多