找到两个向量中存在的共同值

时间:2014-02-05 01:58:12

标签: r vector

以下代码未给出正确答案。你知道为什么吗?

考虑向量c(25,29,20,0,6,29,15,17,22,2,9,6,17,26,24,5,3,26,6,28,25, 7,18,21,6,14,20,8,15,3)。 找到上面向量中也在此向量中的值的总和:c(0,5,25,1,2,18,17,28,18,29,16,1,8,6,1)。< / p>

v<- c(25,29,20,0,6,29,15,17,22,2,9,6,17,26,24,5,3,26,6,28,25,7,18,21,6,14,20,8,15,3)
v2<-c(0, 5, 25, 1, 2, 18, 17, 28, 18, 29, 16, 1, 8, 6, 1)
v21<-intersect(v2,v)
sum(v21)

另外,如何使用%in%解决此问题?

2 个答案:

答案 0 :(得分:3)

您确实可以使用%in%

sum(v[v %in% v2])
# [1] 227

intersect解决方案不起作用的原因是它删除了v中的重复值。例如,对于v = c(2, 2, 3)v2 = c(2, 4)intersect(v, v2)等于c(2),而不是c(2, 2)

答案 1 :(得分:1)

另外

sum(v2[match(v, v2, nomatch = 0)])
# [1] 227

来自R docs:

%in% is currently defined as 
"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0

因此直接使用match可能会更快一点(没有测试速度难度)。