0

我需要比较存储在两个变量中的值。变量大小不同。例如

x = c(1,2,3,4,5,6,7,8,9,10)

y = c(2,6,11,12,13)

我需要一个答案,即两个变量中都存在 2 和 6。我需要在 R 中完成此操作。请大家帮忙。

4

3 回答 3

8

intersect 函数避免了对@mdsumner 的简单索引的需要:

> x = c(1,2,3,4,5,6,7,8,9,10)
> y = c(2,6,11,12,13)
> intersect(x,y)
[1] 2 6

在这里可以找到一大堆集合运算符:help(intersect)

于 2012-06-05T12:29:52.687 回答
2

在允许某种公差的附加要求之后发布:您可以顺序检查一组值与第二组中的所有其他值,或者您可以使用outer(). 一旦您将外部结果作为逻辑矩阵,仍然存在引用值的任务,但 expand.grid 似乎能够处理:

expand.grid(x,y)[outer(x,y, FUN=function(x,y) abs(x-y) < 0.01), ]
#   Var1 Var2
#2     2    2
#16    6    6

发布后我发现您的值已排序。事实证明,从 expand.grid() 中提取的内容在传递未排序的向量时仍然存在。

于 2012-06-05T14:01:36.367 回答
1
x[x %in% y]
[1] 2 6

或者,更明确地说:

x[match(x, y, nomatch = 0) > 0]
[1] 2 6

请注意,您实际上将 的结果match与输入值的简单索引链接在一起。

?match

于 2012-06-05T12:21:02.007 回答