R的交叉点

时间:2014-06-19 14:15:28

标签: r apply

我有两张桌子。

两个表只有一列。

两者都有1到1000之间的随机整数值。

我想要将这两个表相交。我想要将这些数字相交,即使它们有大约10的差异。

1st table -> 5 , 50, 160, 280
2nd table -> 14, 75, 162, 360

输出 - >

1st table -> 5, 160
2nd table -> 14, 162

我如何在R

中实现这一目标

2 个答案:

答案 0 :(得分:3)

您可以使用sapply函数执行此操作,检查xy的每个元素是否足够接近另一个向量的某个成员:

x <- c(5, 50, 160, 280)
y <- c(14, 75, 162, 360)
new.x <- x[sapply(x, function(z) min(abs(z-y)) <= 10)]
new.y <- y[sapply(y, function(z) min(abs(z-x)) <= 10)]
new.x
# [1]   5 160
new.y
# [1]  14 162

答案 1 :(得分:0)

这是一种使用outer函数的方法(所以你的2个表需要合理的大小):

x <- c(5,50,160,280)
y <- c(999,14,75,162,360)

tmp1 <- outer(x,y, function(x,y) abs(x-y))
tmp2 <- which(tmp1 <= 10, arr.ind=TRUE)

rbind(
    x=x[ tmp2[,1] ],
    y=y[ tmp2[,2] ]
)

这会查看x和y之间的每个可能的对,并计算2个值之间的差异,然后找到差异