哪个数字存在于向量中但不存在于另一个中

时间:2013-04-30 10:55:21

标签: r any which

我想这是一个非常简单的问题。

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

(没有重复这些数字。无需使用unique()

我想要一个包含v1中不在v2中的所有值的向量。

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

我可以使用for循环执行此操作,但我确信有更简单的解决方案。

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

%in%运算符与逻辑NOT(!)一起使用v1以外的值v2

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

或使用which获取索引:

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

同一件事的所有口味。还有很多方法可以做到这一点。绝对不要使用循环,因为这种操作是一个很好的例子,你可以如何采取R的矢量化的优点。循环最好被称为副作用和/或处理迭代次数比率很大。