私はマトリックスを持っています
df<-matrix(data=c(3,7,5,0,1,0,0,0,0,8,0,9), ncol=2)
rownames(df)<-c("a","b","c","d","e","f")
[,1] [,2]
a 3 0
b 7 0
c 5 0
d 0 8
e 1 0
f 0 9
そして、最初に列1、次に列2の降順で行列を並べ替えて、行列になります
df.ordered<-matrix(data=c(7,5,3,1,0,0,0,0,0,0,9,8),ncol=2)
rownames(df.ordered)<-c("b","c","a","e","f","d")
[,1] [,2]
b 7 0
c 5 0
a 3 0
e 1 0
f 0 9
d 0 8
これをどのように達成できるかについての提案はありますか?ありがとう。
order
関数で実行する必要があります。
df[order(df[,1],df[,2],decreasing=TRUE),]
主な答えを完成させるために、手動で列を指定することなく、プログラムで実行する方法を次に示します。
set.seed(2013) # preparing my example
mat <- matrix(sample.int(10,size = 30, replace = T), ncol = 3)
mat
[,1] [,2] [,3]
[1,] 5 1 6
[2,] 10 3 1
[3,] 8 8 1
[4,] 8 9 9
[5,] 3 7 3
[6,] 8 8 5
[7,] 10 10 2
[8,] 8 10 7
[9,] 10 1 9
[10,] 9 4 5
簡単な例として、すべての列を出現順に使用してマトリックスの行をソートするとします。(マトリックスにインデックスのベクトルを簡単に与えることができます)
mat[do.call(order, as.data.frame(mat)),] #could be ..as.data.frame(mat[,index_vec])..
[,1] [,2] [,3]
[1,] 3 7 3
[2,] 5 1 6
[3,] 8 8 1
[4,] 8 8 5
[5,] 8 9 9
[6,] 8 10 7
[7,] 9 4 5
[8,] 10 1 9
[9,] 10 3 1
[10,] 10 10 2
order
関数が役立ちます。これを試してください:
df[order(-df[,1],-df[,2]),]
[,1] [,2]
b 7 0
c 5 0
a 3 0
e 1 0
f 0 9
d 0 8
df
の前のマイナスは、順序が減少していることを示します。同じ結果設定が得られますdecreasing=TRUE
。
df[order(df[,1],df[,2],decreasing=TRUE),]