这看起来很容易,但是我一直碰到困难。
我有数值向量
v1
。v1 <- c(1,1,3,5,7,7)
我有一个数值向量v2。v2始终是v1的子集
我想从v1中删除所有来自v2的元素,但每个v2元素仅删除一个(而且确切地说只有一个)v1元素。
期望的输出
如果v2 <- c(3,5)
,我希望保留v1中的c(1,1,7,7)
。这很容易使用v1[-match(v2,v1)]
实现。
如果v2 <- c(1,7)
,我想保留v1中的c(1,3,5,7)
。同样,v1[-match(v2,v1)]
也能做到。
如果v2 <- c(1,1)
,我想从v1中保留c(3,5,7,7)
。现在v1[-match(v2,v1)]
返回[1] 1 3 5 7 7
,不是我想要的。
vecsets
包。我可以更经常地使用那些函数。 - Wimpelsetdiff
方法似乎不起作用,因为它给出了v2 <- c(1,3,7)
。 - ThomasIsCodingv2<-c(1,3)
也不能正常工作。可能是一个 bug。 - Davidvsetdiff
的解决方案,因为我认为setdiff
无法给出一个适当的方法来解决这个问题。你可以尝试使用Map("*",1:5,c(-1,1))
来了解Map
的工作原理。你在setdiff
解决方案中的情况只是一个非常特殊的情况,碰巧起作用。 - ThomasIsCoding