2016-05-08 13 views
0

の一部のみで並べ替え行列は、言う:R:私は行列を持つ列

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 

私は絶対値の列のでMをソートする方法を知っています[ 、3(例えば):だから

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の最初の2行は変更されないよう:

簡単な方法でこれを行う方法が見つかりませんでした。何か案が ?
ありがとうございます。

+0

を試すことができます! – Andrew

答えて

2

私たちはそんなにありがとう、まあ

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 
0
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 
関連する問題