2016-04-11 12 views
0

Ich habe drei Faktoren/Matrizen (NFA, RX und LDC). Zuerst möchte ich jede Zeile in NFA aufsteigend und RX sollte auf die gleiche Weise wie NFA bestellt werden. Das funktioniert. Aber dann möchte ich den Faktor NFA in zwei Gruppen (G1 und G2) trennen. Beide Gruppen sollten nach dem Schema des dritten LDC-Faktors neu bestellt werden (separat). Mein Code gibt mir eine falsche Sortierung, aber ich weiß nicht warum.Bestellung von zwei Matrizen nach einer dritten Matrix (mit% in%)

Daten

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)

Erste Sortierung:

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)

jede Gruppe nach dem Schema von LDC Bestellung

G1 <- 1:(columns/2); G2 <- (1+columns/2):columns for (i in 1:nrow(LDC)) {
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]
}
Das Problem ist, dass in Gruppe 1 und Gruppe 2 ich die falsche Reihenfolge haben.

sollte die richtige Lösung wie folgt aussehen:

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)

Vielleicht einen Tipp für mich hat jemand? Ich weiß nicht, wo mein Fehler ist.

Vielen Dank im Voraus,

Jordan

+0

ich nicht ganz verstehe Ihr Problem und Ihre Lösung Datenrahmen
Jordan ist aber eine ähnliche C-Matrix pro Gruppe mit Bestellung erhalten mit einem Ansatz wie folgt: 'apply (LDC, 1, Funktion (x, y) Ordnung (y, x), c (rep (1,3), rep (2,3))). Sie fügen ('rbind') eine Gruppierungszeile hinzu und sortieren nach dieser und der Zielzeile. – Jimbou

+0

Danke für Ihren Hinweis. Mein Hauptproblem ist die Reihenfolge in o1 und o2 in meinem Code. Hier möchte ich nach der Sequenz in LDC jede Zeile der Matrix "NFA.neu" bestellen. Aber meine Sortierung ist nicht in der Reihenfolge der LDC und ich weiß nicht warum. – Jordan

+0

OK, aber sind Sie sicher, dass die von Ihnen bereitgestellte "Solution" -Matrix korrekt ist? – Jimbou

Antwort

0


die erste Zeile in NFA.neu ist in aufsteigender Reihenfolge: Matrix (c (1,3,4,5,7,9), 1,1).
Dann möchte ich zwei Gruppen machen:
G1: 1,3,4;
G2: Now 5,7,9

, ich habe die Matrix LDC: 7, 1 , 5,9, 4 , (es enthält die gleichen Werte wie NFA.neu).
In LDC kommt die 1 vor 4 und dann 3. Also sollte meine neue Bestellung in G1: 1,4,3 sein.

Für Gruppe 2: In LDC kommt die 7 vor 5 und dann 9. Meine neue Bestellung für Gruppe 2 sollte 7,5,9 sein. Wenn Sie G1 und G2 kombinieren, dann erhalten Sie: 1,4,3, 7,5,9 Die gleiche Methode, die ich für Zeile 2-4 brauche.

Ich hoffe, dass es ein bisschen mehr klar und vielen Dank für Ihre Bemühungen und Hilfe,

+0

Die Vektoren 'G1' und' G2' in diesem Beitrag unterscheiden sich von den Gruppenvektoren in Ihrem ersten Post. Bitte benutze den Bearbeiten-Button und überarbeite deinen ersten Beitrag. Und bitte seien Sie genauer und lassen Sie unnötige Dinge weg. – Jimbou

Verwandte Themen