2016-04-11 9 views
0

3つの要素/行列(NFA、RX、LDC)があります。まず、NFAのすべての行を昇順に並べ替える必要があり、RXはNFAと同じ方法で注文する必要があります。これは機能します。しかし、その後、NFA因子を2つの群(G1とG2)に分けたいと思う。両方のグループは、第3因子LDCのスキームの後で新しい順序(別個に)にすべきである。私のコードは私に間違った並べ替えを与えますが、なぜ私は分かりません。3つ目の行列の後に2つの行列を並べ替える(%in%を使用)

データ

NFA<-matrix(c(4,9,5,3,1,7, 12,51,15,6,9,3, 9,5,1,11,3,8, 5,9,7,18,21,17),4,6,byrow=TRUE) RX<-matrix(c(1,3,7,1,5,4, 6,12,3,8,3,5, 4,4,5,34,8,2, 5,7,11,5,13,17),4,6,byrow=TRUE) LDC<-matrix(c(7,1,5,9,4,3, 12,51,6,3,9,15, 8,3,11,1,5,9, 9,5,7,18,17,21),4,6,byrow=TRUE) columns <- ncol(NFA)

第1選別:

C<-t(apply(NFA, 1, order)) NFA.neu <- matrix(NFA[cbind(c(row(NFA)), c(C))], ,columns) RX.neu <- matrix(RX[cbind(c(row(NFA)), c(C))], ,columns)


G1 <- 1:(columns/2); G2 <- (1+columns/2):columns LDCのスキームの後にすべてのグループを発注3210
nfa <- NFA.neu[i,]; ldc <- LDC[i,]
o1 <- order(ldc[nfa %in% ldc[G1]])
o2 <- order(ldc[nfa %in% ldc[G2]]) + columns/2
o<-c(o1, o2)
NFA.neu[i,]<- NFA.neu[i, o]
RX.neu[i,]<- RX.neu[i, o]
}
問題はgroup1とgroup2の中に、私は間違った順序を持っているということです。

適切なソリューションは、次のようになります。

Solution<-matrix(c(1,4,3,7,5,9, 6,3,9,12,51,15, 3,1,5,8,11,9, 9,5,7,18,17,21),4,6,byrow=T)

たぶん誰かが私のためのヒントを持っていますか?私のミスはどこにあるのか分かりません。 、 マトリックス(C(1,3,4,5,7,9):

は、事前に

ヨルダン

+0

私は完全にあなたの問題とソリューションのデータフレームを理解していないが、あなたはグループごとの順序を使用して、同様のC行列を取得します'apply(LDC、1、function(x、y)order(y、x)、c(rep(1,3)、rep(2,3)))'のようなアプローチで実装します。グループ化行を追加( 'rbind')し、これとターゲット行でソートします。 – Jimbou

+0

あなたのヒントをありがとう。私の主な問題は、コード内のo1とo2の順序です。ここでは、LDCのシーケンスの後に行列 "NFA.neu"のすべての行を並べ替える必要があります。しかし、私の選別はLDCの順番ではないので、理由はわかりません。 – Jordan

+0

OKですが、あなたの提供する 'Solution' Matrixが正しいと確信していますか? – Jimbou

答えて

0


NFA.neuの最初の行が昇順であるありがとう1,1)。
次に、2つのグループを作成します。
G1:1,3,4;
G2:(それはNFA.neuと同じ値が含まれている)7、、5,9、、:今5,7,9

、Iは行列LDCを有します。
LDCでは、1が4の前に来て3になるので、私の新しい注文はG1:1,4,3になるはずです。

グループ2の場合:LDCでは、5の前に7が、その後に9が続きます。グループ2の新しい順序は7,5,9です。 G1とG2を組み合わせると、次のようになります。1,4,3,7,5,9 2-4行目と同じ方法です。

私はそれをもう少し明確にし、あなたの努力に感謝し、助けていることを願って、
ヨルダン

+0

この投稿の「G1」と「G2」のベクトルは、最初の投稿のグループのベクトルとは異なります。編集ボタンを使用して、最初の投稿を改訂してください。そして、もっと正確にして、不必要なものを省略してください。 – Jimbou

関連する問題