I haben zwei Zeichenvektoren der Länge 5:Halten einzigartige Rang Werte von 2 Zeichenvektoren in R
x <- c("B","A","D","K","F")
y <- c("A","C","D","F","E")
Die Eigenschaften dieser Vektoren sind die folgenden:
- Jeder Vektor bestellt wird (für Beispiel, in Vektor
x
Element"B"
ist wichtiger als"A"
) - Es gibt keine Duplikate in jedem Vektor, aber dort kann Duplikate unter ihnen (wie es der Fall in diesem Beispiel ist)
Was ich will ist, um diese zwei Vektoren um z
einen neuen Vektor zu erhalten „merge“ der Länge 5, die die wichtigsten enthält nicht duplicate Elemente der Vektoren x
und y
, was x
im Falle von Krawatten eine Priorität gibt.
Um klarer zu sein, die Logik meines Programms soll wie folgt funktionieren:
- Nehmen Sie das erste Element
x
undy
: wenn sie anders sind, so dass sie das zweite Element vonx
Nehmen innenz
- setzen und
y
: Wenn es einen Wert gibt, der bereits innerhalbz
ist, ignorieren Sie es.
Eine andere Möglichkeit, dies zu sehen ist: Wenn ein Wert an einer höheren Position gespeichert wird, entweder inx
odery
, ignorieren Sie ihn. Sonst, setzen Sie es inz
. - Gehen Sie zur nächsten Position und führen Sie erneut 2 durch, wobei Sie jeden Wert mit allen Werten in höheren Positionen sowohl in
x
als auch iny
vergleichen. - Stop, wenn
length(z)==5
In meinem Beispiel würde es funktionieren wie folgt:
- Put
B
undA
innenz
- Put
C
innenz
- Put
D
innenz
(die jetzt von Länge 4) - Wir haben Werte jetzt
K
undF
: Wenn wir beide setzen, wirdlength(z)
6 sein, so nehmen Sie nurK
wie es inx
(Priorität) ist
Der resultierende Vektor z = c("B","A","C","D","K")
wäre.
Ich könnte die Vektoren in Listen oder was auch immer transformieren, aber ich möchte Schleifen vermeiden.Hier
Genau das, was ich gesucht habe: einfach und sauber. Netter Zug mit dem 'as.vector' Teil: Ich dachte nicht darüber nach, die Vektoren zu verketten und die Reihenfolge ihrer Elemente beizubehalten :) – hellter