【问题标题】:intersection in RR中的交叉点
【发布时间】:2014-08-10 02:54:27
【问题描述】:

我有两张桌子。

两个表都只有 1 列。

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

我想将这两个表相交。问题是我想将这些数字相交,即使它们相差大约 10。

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

输出->

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

如何在 R 中实现这一点

【问题讨论】:

  • 这些表格是什么格式的?
  • 我在旅行。我的表是一个数据框

标签: r apply


【解决方案1】:

您可以使用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

【讨论】:

  • 见鬼,为什么不 x&lt;-as.integer(x/10) 后跟 intersect ? :-)
  • @CarlWitthoft 我认为这不会捕获 9 和 11(或本例中的 5 和 14)。
  • 我明白你的意思了。我的代码只有在 yy 是 10 的倍数时才有效。现在我得开始寻找一些更奇怪的方法了。
  • 我不知道为什么我对这个问题投了 3 票。这个网站的霸凌者太多了
  • @user3683555 我猜你被否决了,因为你没有发布自己的编码尝试并显示你卡在哪里。
【解决方案2】:

这是一种使用 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 个值之间的差值,然后找到差值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2018-10-07
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多