保留 R 中 2 个字符向量的唯一排名值

Keep unique ranked values from 2 character vectors in R

我有两个长度为 5 的字符向量:

x <- c("B","A","D","K","F")
y <- c("A","C","D","F","E")

这些向量的特征如下:

  1. 每个向量都是有序的(例如,在向量 x 中,元素 "B""A" 更重要)
  2. 每个向量中没有重复项,但其中可能是重复项(如本例中的情况)

我想要的是"merge"这2个向量以获得一个新向量z长度为5其中包含最重要的[=向量 xy 的 55=] 非重复 个元素,在平局的情况下优先考虑 x
更清楚地说,我的程序的逻辑应该如下工作:

  1. xy的第一个元素:如果不一样,就放在z
  2. 里面
  3. xy 的第二个元素:如果 z 中已经有一个值,则忽略它。否则,把它放进去。
    另一种方法是:如果有一个值存储在 xy 中的较高位置,请忽略它。否则,将其放入 z.
  4. 转到下一个位置并再次执行 2,将每个值与 xy 中较高位置的所有值进行比较。
  5. length(z)==5
  6. 时停止

在我的示例中,它将按如下方式工作:

  1. BA放在z
  2. 里面
  3. C放入z
  4. D放入z(现在长度为4)
  5. 我们现在有值 KF:如果我们把两者都放,length(z) 将是 6,所以只取 K 因为它在 x(优先级)

生成的向量将是 z = c("B","A","C","D","K")

我可以转换列表或其他任何形式的向量,但我想避免使用循环。

这是一个解决方案:

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"

感谢详细的解释。