我需要比较存储在两个变量中的值。变量大小不同。例如
x = c(1,2,3,4,5,6,7,8,9,10)
和
y = c(2,6,11,12,13)
我需要一个答案,即两个变量中都存在 2 和 6。我需要在 R 中完成此操作。请大家帮忙。
我需要比较存储在两个变量中的值。变量大小不同。例如
x = c(1,2,3,4,5,6,7,8,9,10)
和
y = c(2,6,11,12,13)
我需要一个答案,即两个变量中都存在 2 和 6。我需要在 R 中完成此操作。请大家帮忙。
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)
在允许某种公差的附加要求之后发布:您可以顺序检查一组值与第二组中的所有其他值,或者您可以使用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() 中提取的内容在传递未排序的向量时仍然存在。
x[x %in% y]
[1] 2 6
或者,更明确地说:
x[match(x, y, nomatch = 0) > 0]
[1] 2 6
请注意,您实际上将 的结果match
与输入值的简单索引链接在一起。
见?match
。