Ich habe einen Vektor x, den ich basierend auf der Reihenfolge der Werte in Vektor y sortieren möchte. Die beiden Vektoren sind nicht gleich lang.
x <- c(2, 2, 3, 4, 1, 4, 4, 3, 3)
y <- c(4, 2, 1, 3)
Das erwartete Ergebnis wäre:
[1] 4 4 4 2 2 1 3 3 3
x
und fehly
.x <- c(1,4,2); y <- c(1,2,4)
zum Beispiel.was ist mit diesem
quelle
Sie könnten
x
in einen geordneten Faktor umrechnen :Offensichtlich kann die Änderung Ihrer Zahlen in Faktoren die Art und Weise, wie Code nachgeschaltet reagiert, radikal verändern
x
. Aber da Sie uns keinen Kontext darüber gegeben haben, was als nächstes passiert, dachte ich, ich würde dies als Option vorschlagen.quelle
x
nicht im Sortiervektory
mit geringfügiger Änderung gibt:x <- c(2, 2, 3, 4, 1, 4, 4, 3, 3, 6); y <- c(4, 2, 1, 3); as.numeric(as.character(sort(factor(x, unique(c(y, x))))))
Wie wäre es mit?:
(Ians ist wahrscheinlich noch besser)
quelle
Falls Sie eine Bestellung für "y" benötigen, egal ob es sich um Zahlen oder Zeichen handelt:
Schritt für Schritt:
quelle
[ Bearbeiten: Natürlich hat Ian den richtigen Ansatz, aber ich werde dies der Nachwelt überlassen.]
Sie können dies ohne Schleifen tun, indem Sie Ihren y-Vektor indizieren. Fügen Sie y einen inkrementellen numerischen Wert hinzu und führen Sie sie zusammen:
quelle
Das Ergebnis in z: 4 4 4 2 2 1 3 3 3
Die wichtigen Schritte:
for (i in y) - Schleifen über die interessierenden Elemente.
z <- c (z, ...) - Verkettet nacheinander jeden Unterausdruck
rep (i, sum (x == i)) - Wiederholt i (das aktuelle interessierende Element) sum (x == i) mal (die Häufigkeit, mit der wir i in x gefunden haben).
quelle
Sie können
sqldf
es auch mit einerjoin
Funktionsql
wie folgt verwenden und ausführen:quelle