R 从另一个向量中删除向量中第一个出现的元素
我有一个字符向量,包括一些重复的元素,例如R 从另一个向量中删除向量中第一个出现的元素,r,duplicates,R,Duplicates,我有一个字符向量,包括一些重复的元素,例如 v <- c("d09", "d11", "d13", "d01", "d02", "d10", "d13") 我一直在尝试各种方法,例如z您可以使用match和负索引 v[-match(x, v)] 产生 [1] "d09" "d01" "d02" "d13" match仅返回值的第一个匹配的位置,我们在这里使用该位置 请注意,%中的%和是.element是匹配的退化版本。比较: match(x, v) # [1]
v <- c("d09", "d11", "d13", "d01", "d02", "d10", "d13")
我一直在尝试各种方法,例如
z您可以使用match
和负索引
v[-match(x, v)]
产生
[1] "d09" "d01" "d02" "d13"
match
仅返回值的第一个匹配的位置,我们在这里使用该位置
请注意,%
中的%和是.element
是匹配的退化版本。比较:
match(x, v) # [1] 6 2 3
match(x, v) > 0 # [1] TRUE TRUE TRUE
x %in% v # [1] TRUE TRUE TRUE
is.element(x, v) # [1] TRUE TRUE TRUE
最后三个都是相同的,基本上是第一个的强制逻辑版本(事实上,请参见%
中的%代码和is.element
)。这样做会丢失关键信息,即v
中x
的第一个匹配位置,只知道x
值存在于v
中
相反,v%in%x
表示与您想要的不同,即“v
中的哪些值在x
中”,这将不满足您的要求,因为所有重复值都将满足该条件
v[-match(x, v)]
[1] "d09" "d01" "d02" "d13"
match(x, v) # [1] 6 2 3
match(x, v) > 0 # [1] TRUE TRUE TRUE
x %in% v # [1] TRUE TRUE TRUE
is.element(x, v) # [1] TRUE TRUE TRUE