2016-06-17 6 views
0

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:

  1. Jeder Vektor bestellt wird (für Beispiel, in Vektor x Element "B" ist wichtiger als "A")
  2. 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:

  1. Nehmen Sie das erste Element x und y: wenn sie anders sind, so dass sie das zweite Element von x Nehmen innen z
  2. setzen und y: Wenn es einen Wert gibt, der bereits innerhalb z ist, ignorieren Sie es.
    Eine andere Möglichkeit, dies zu sehen ist: Wenn ein Wert an einer höheren Position gespeichert wird, entweder in x oder y, ignorieren Sie ihn. Sonst, setzen Sie es in z.
  3. 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 in y vergleichen.
  4. Stop, wenn length(z)==5

In meinem Beispiel würde es funktionieren wie folgt:

  1. Put B und A innen z
  2. Put C innen z
  3. Put D innen z (die jetzt von Länge 4)
  4. Wir haben Werte jetzt K und F: Wenn wir beide setzen, wird length(z) 6 sein, so nehmen Sie nur K wie es in x (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

Antwort

1

ist eine Lösung:

x <- c("B","A","D","K","F") 
y <- c("A","C","D","F","E") 
df=(t(data.frame(x,y))) 
(result=unique(as.vector(df))[1:5]) 
[1] "B" "A" "C" "D" "K" 

Dank für die nette ausführliche Erklärung.

+0

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

Verwandte Themen