2017-09-04 2 views
0

他の列の行合計のランクに従って行列の列をソートしたいと思います。だから私はこのコードを使用しますR - sort関数は行列を変更します

for(j in 1:d) { 
    X[,j]=sort(X[,j],decreasing=TRUE)[rank(rowSums(X[,c(1:d)[-j]]))] 
} 

をしかし、このコードは、私はちょうど再配置する列の値を、変更します。 行の合計が等しい場合、元の列にすべての値が1回だけ存在するにもかかわらず、j番目の列の値も同じになります。例:

example

どのように私はこの問題を回避することができますか?

ありがとうございました

+0

可能性 - それはあなただけRがソートされることを意味一次元でインデックス化されている現状のままベクトルとして。 –

+0

これは私の例では機能しません。しかし、それはベクトルとしてソートされるべきかどうか? – Applekes

+0

各ステップで列を個別に並べ替えてから、変更された行列を使用して新しいランクを計算することは承知していますか?私は、あなたが「for(j in 1:d){X [、j] = X [order(rowSums(X [、c(1:d)[ - j]]) j]} 'しかし、私はあなたが達成しようとしていることを確信していません。再現可能な例と期待される出力でより簡単になります –

答えて

0

希望します。

#sample data 
x <- matrix(c(1,1,1,2,2,2,3,3,3), nrow=3, ncol=3, byrow=T) 

#if you want to sort by row-sum of 2nd & 3rd column 
x[order(rowSums(x[,-1]), decreasing = T),] 
#if you want to sort by row-sum of 1st & 2nd column 
x[order(rowSums(x[,-3]), decreasing = T),] 

ので、最終的なループはおそらく、あなたの `rank`文の末尾にカンマが必要

x <- matrix(c(1,1,1,2,2,2,3,3,3), nrow=3, ncol=3,byrow=T) 
X <- x 
for(j in 1:ncol(x)) { 
    X[,j]=x[order(rowSums(x[,-j]), decreasing = T),j] 
} 
関連する問題