gpt4 book ai didi

从另一个向量中删除向量中第一次出现的元素

转载 作者:行者123 更新时间:2023-12-03 22:16:33 24 4
gpt4 key购买 nike

我有一个字符向量,包括一些重复的元素,例如

v <- c("d09", "d11", "d13", "d01", "d02", "d10", "d13")

另一个向量包含这些字符的单个计数,例如
x <- c("d10", "d11", "d13")

我只想删除 x 中每个元素的第一次出现来自第二个向量 v .在本例中, d13发生在 x和两次在 v ,但只有第一个匹配项从 v 中删除并保留副本。因此,我想结束:
"d09", "d01", "d02", "d13"

我一直在尝试各种事情,例如 z <- v[!(v %in% x)]但它不断删除 x 中字符的所有实例,不仅仅是第一个,所以我最终得到了这个:
"d09", "d01", "d02"

我该怎么做才能只删除重复元素的一个实例?

最佳答案

您可以使用 match和负索引。

v[-match(x, v)]

产生
[1] "d09" "d01" "d02" "d13"
match只返回一个值的第一个匹配的位置,我们在这里利用它。

请注意 %in%is.elementmatch 的退化版本.相比:
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

后三个都是一样的,基本上是第一个的强制逻辑版本(实际上,参见 %in%is.element 的代码)。这样做会丢失关键信息,即 x 第一个匹配项的位置。在 v并且只知道 x值存在于 v .

反过来, v %in% x意味着与您想要的不同,即“ v 中的哪些值在 x 中”,这不符合您的要求,因为所有重复值都将满足该条件。

关于从另一个向量中删除向量中第一次出现的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30129684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com