rw2*_*rw2 14 r duplicates
我有一个字符向量,包括一些重复的元素,例如
v <- c("d09", "d11", "d13", "d01", "d02", "d10", "d13")
Run Code Online (Sandbox Code Playgroud)
另一个向量包括这些字符的单个计数,例如
x <- c("d10", "d11", "d13")
Run Code Online (Sandbox Code Playgroud)
我想从第二个向量中仅删除每个元素的第一个出现位置.在此示例中,发生在两次,但仅删除第一个匹配,并保留副本.因此,我想最终得到:x
v
d13
x
v
v
"d09", "d01", "d02", "d13"
Run Code Online (Sandbox Code Playgroud)
我一直在尝试各种各样的东西,z <- v[!(v %in% x)]
但它不断删除所有角色的实例x
,而不仅仅是第一个,所以我最终得到了这个:
"d09", "d01", "d02"
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能删除重复元素的一个实例?
Bro*_*ieG 17
您可以使用match
和负索引.
v[-match(x, v)]
Run Code Online (Sandbox Code Playgroud)
产生
[1] "d09" "d01" "d02" "d13"
Run Code Online (Sandbox Code Playgroud)
match
只返回值的第一个匹配位置,我们在这里使用它们.
需要注意的是%in%
和is.element
是简并版本match
.相比:
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
Run Code Online (Sandbox Code Playgroud)
最后三个都是相同的,基本上是强制到第一个的逻辑版本(事实上,参见代码%in%
和is.element
).在这样做,你失去了关键信息,这是第一场比赛的位置x
在v
和所剩下的只是知道,x
在存在价值v
.
相反,v %in% x
意味着与您想要的东西不同,即"哪些值v
在x
"中,这将不符合您的要求,因为所有重复值都将满足该条件.