我有两张桌子。
两个表只有一列。
两者都有1到1000之间的随机整数值。
我想要将这两个表相交。我想要将这些数字相交,即使它们有大约10的差异。
1st table -> 5 , 50, 160, 280
2nd table -> 14, 75, 162, 360
输出 - >
1st table -> 5, 160
2nd table -> 14, 162
我如何在R
中实现这一目标答案 0 :(得分:3)
您可以使用sapply
函数执行此操作,检查x
或y
的每个元素是否足够接近另一个向量的某个成员:
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个值之间的差异,然后找到差异