以下代码未给出正确答案。你知道为什么吗?
考虑向量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%
解决此问题?
答案 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
可能会更快一点(没有测试速度难度)。