首页 > 解决方案 > 计算两个向量之间相同值的数量

问题描述

a<-c(19,24,34,47,47,47)
b<-c(3,14,24,25,47,47)

我想知道有多少值a与 中的值匹配b,但是我遇到了问题 - 当两个向量中都存在重复的数字时。对于上面的例子,我想要的答案是3——因为 24、47、47——在两个向量之间共享。

如果我使用相交:

intersect(a,b)

[1] 24 47

第二个匹配的 47 被忽略。

如果我使用 %in%:

length(which(a %in% b))
[1] 4

额外的 47 也被计算在内。

我意识到我可以做到:

length(which(b %in% a))
[1] 3

但是,我也可能遇到 b 中存在额外匹配值而不是 a 的情况,因此 %in% 也没有用。例如:

a<-c(19,24,34,7,47,47)
b<-c(3,14,24,47,47,47)
length(which(b %in% a))
[1] 4 (I want the answer to still be 3)

因此,对于每个测试,如果不重新排列哪个向量首先出现在 %in% 函数中 - 我无法弄清楚如何做到这一点。有人可以告诉我怎么做吗?

标签: r

解决方案


怎么样:

sum(pmin(
  table(a[a %in% intersect(a, b)]),
  table(b[b %in% intersect(a, b)])
))

我们将table()s 的块组成 s ab它们对两者都是通用的,然后我们从这些表中取出最小的数字并将它们相加。


推荐阅读