我有一个字符向量,包括一些重复的元素,例如
v <- c("d09", "d11", "d13", "d01", "d02", "d10", "d13")
另一个矢量包括那些字符的单个计数,例如
x <- c("d10", "d11", "d13")
我想从第二个向量 v
中仅删除 x
中每个元素的第一个匹配项 . 在此示例中, d13
出现在 x
中,两次出现在 v
中,但只有第一个匹配项从 v
中删除,并且保留了副本 . 因此,我想最终得到:
"d09", "d01", "d02", "d13"
我一直在尝试各种各样的事情,例如 z <- v[!(v %in% x)]
但它不断删除 x
中所有字符的实例,而不仅仅是第一个,所以我最终得到了这个:
"d09", "d01", "d02"
我该怎么做才能删除重复元素的一个实例?
2 回答
您可以使用
match
和负索引 .产生
match
仅返回值的第一个匹配位置,我们在此处使用这个位置 .请注意,
%in%
和is.element
是match
的简并版本 . 相比:最后三个都是相同的,基本上是第一个的逻辑版本(事实上,参见
%in%
和is.element
的代码) . 这样做会丢失关键信息,这是v
中x
的第一个匹配位置,并且只知道v
中存在x
值 .相反,
v %in% x
表示与您想要的不同,即“v
中的哪些值在x
中”,这将不符合您的要求,因为所有重复值都将满足该条件 .is.element