R 获取两个向量的唯一值,保持两个原始向量的顺序

R 获取两个向量的唯一值,保持两个原始向量的顺序,r,R,我试图得到两个向量的唯一元素的向量,这两个向量的顺序都是原始向量 矢量都是从一个较长的“隐藏”矢量中采样的,该矢量只包含唯一的条目(即不允许重复),这确保v1和v2具有兼容的顺序(即v1对于本例,下一个代码起作用。首先必须定义辅助向量w1,w2,这取决于哪个向量具有第一个公共元素和另一个向量w,在该向量上按顺序追加缺少的元素 使用for循环会更清晰,这样可以避免这种繁琐的代码,但一开始,这会更快、更短 w您可以从v1和v2获得unique,然后在v1和v2上使用match进行匹配,并重复此操作,

我试图得到两个向量的唯一元素的向量,这两个向量的顺序都是原始向量


矢量都是从一个较长的“隐藏”矢量中采样的,该矢量只包含唯一的条目(即不允许重复),这确保v1和v2具有兼容的顺序(即v1对于本例,下一个代码起作用。首先必须定义辅助向量
w1
w2
,这取决于哪个向量具有第一个公共元素和另一个向量
w
,在该向量上按顺序追加缺少的元素

使用
for
循环会更清晰,这样可以避免这种繁琐的代码,但一开始,这会更快、更短


w您可以从
v1
v2
获得
unique
,然后在
v1
v2
上使用
match
进行匹配,并重复此操作,直到没有变化发生

x <- unique(c(v1, v2))
repeat {
  y <- x
  i <- match(v2, x)
  x[sort(i)] <- x[i]
  i <- match(v1, x)
  x[sort(i)] <- x[i]
  if(identical(x, y)) break;
}
x
#[1] "Z" "A" "T" "F" "Q" "D"

我认为不是。每个向量都定义了一个顺序,并且两者都是兼容的。在
v2
中,一个向量有
Q
,因此在最后一个向量中,应该有
Q
@iago。谢谢,这正是事实。所有向量中的相对顺序都应该保持。抱歉,但问题没有明确说明。例如,为什么要放置“Q”在“D”之前在您想要的解决方案中?v2是否比v1优先?举个简单的例子,如果您有v1@AdrianTompkins如上所述,没有任何向量的优先级。问题要求保持两个原始向量的顺序,因此您的
v1
v2
不可能是原始向量,因为它们的顺序不兼容。因此事实上,问题本质上在于v1和v2是第三个“隐藏”较长向量的子样本,该向量只包含唯一的条目。这将确保两个向量具有兼容的顺序,并且不允许重复。:-)
c("Z", "A", "T", "F", "Q", "D") or
x <- unique(c(v1, v2))
repeat {
  y <- x
  i <- match(v2, x)
  x[sort(i)] <- x[i]
  i <- match(v1, x)
  x[sort(i)] <- x[i]
  if(identical(x, y)) break;
}
x
#[1] "Z" "A" "T" "F" "Q" "D"
i <- v2[na.omit(match(v1, v2))]
j <- c(0, match(i, v2))
i <- c(0, match(i, v1))
unique(c(unlist(lapply(seq_along(i)[-1], function(k) {
  c(v1[head((i[k-1]:i[k]), -1)], v2[head((j[k-1]:j[k])[-1], -1)])
})), v1, v2))
#[1] "Z" "A" "T" "F" "Q" "D"