我想这是一个非常简单的问题。r,这些数字存在于一个向量中,但不在另一个中
v1 = 1:10
v2 = c(2,4,7)
(没有数字重复,无需使用唯一的())
我想包含所有在V1不在V2值的向量。
solution = c(1,3,5,6,8,9,10)
我可以使用for循环来做到这一点,但我相信有更简单的解决方案。
谢谢
我想这是一个非常简单的问题。r,这些数字存在于一个向量中,但不在另一个中
v1 = 1:10
v2 = c(2,4,7)
(没有数字重复,无需使用唯一的())
我想包含所有在V1不在V2值的向量。
solution = c(1,3,5,6,8,9,10)
我可以使用for循环来做到这一点,但我相信有更简单的解决方案。
谢谢
setdiff(v1, v2)
# [1] 1 3 5 6 8 9 10
使用%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的矢量化进行优化。循环最好被称为副作用和/或当迭代次数的处理比较大时。