我想这是一个非常简单的问题。
v1 = 1:10
v2 = c(2,4,7)
(没有重复这些数字。无需使用unique()
)
我想要一个包含v1中不在v2中的所有值的向量。
solution = c(1,3,5,6,8,9,10)
我可以使用for循环执行此操作,但我确信有更简单的解决方案。
答案 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的矢量化的优点。循环最好被称为副作用和/或处理迭代次数比率很大。