2013-04-30 150 views
0

我想这是一个非常简单的问题。r,这些数字存在于一个向量中,但不在另一个中

v1 = 1:10 
v2 = c(2,4,7) 

(没有数字重复,无需使用唯一的())

我想包含所有在V1不在V2值的向量。

solution = c(1,3,5,6,8,9,10) 

我可以使用for循环来做到这一点,但我相信有更简单的解决方案。

谢谢

回答

7
setdiff(v1, v2) 
# [1] 1 3 5 6 8 9 10 
2

使用%in%运营商与逻辑NOT(!)由值不在v2子集v1

v1[ ! v1 %in% v2 ] 
#[1] 1 3 5 6 8 9 10 

或者你可以寻找在V2 V1的非匹配(此是几乎相同):

v1[ is.na(match(v1 , v2)) ] 
#[1] 1 3 5 6 8 9 10 

或者USI ng which以获得指数:

v1[ which(! v1 %in% v2) ] 
#[1] 1 3 5 6 8 9 10 

所有味道都是一样的。还有更多的方法可以做到这一点。绝对不要为此使用循环,因为这种操作是一个完美的例子,你可以对R的矢量化进行优化。循环最好被称为副作用和/或当迭代次数的处理比较大时。

相关问题