从向量中删除向量元素

这看起来很容易,但我一直在撞头。

我有数字向量 v1

v1 <- c(1,1,3,5,7,7)

我有一个数字向量 v2。v2 始终是 v1 的子集
我想从 v1 中删除 v2 中的所有元素,但 每个 v2 元素只有一个(并且精确到一个)v1 元素。

期望的输出

如果v2 <- c(3,5)我想c(1,1,7,7)避免 v1. 这个很容易使用v1[-match(v2, v1)]
如果v2 <- c(1,7)我想c(1,3,5,7)避免 v1. 也,v1[-match(v2, v1)]有诀窍。
如果v2 <- c(1,1)我想c(3,5,7,7)避免 v1. 现在v1[-match(v2, v1)]返回[1] 1 3 5 7 7.. 不是我想要的。

回答

您可以通过以下方式使用vsetdiff“vecsets”库(这将保留重复项而不是setdiff):

library(vecsets)
v1 <- c(1,1,3,5,7,7)
v2.1 <- c(3,5)
> vsetdiff(v1, v2.1)
[1] 1 1 7 7
v2.2 <- c(1,7)
> vsetdiff(v1, v2.2)
[1] 1 3 5 7
v2.3 <- c(1,1)
> vsetdiff(v1, v2.3)
[1] 3 5 7 7


回答

Reduce(function(x, y) x[-match(y, x)], v2, init = v1)


以上是从向量中删除向量元素的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>