根据不等式条件连接两个数据集

Posted

技术标签:

【中文标题】根据不等式条件连接两个数据集【英文标题】:Join two datasets based on an inequality condition 【发布时间】:2015-12-29 19:53:40 【问题描述】:

我使用下面的调用根据不等式条件“加入”我的数据集:

library(sqldf)

sqldf("select *
from dataset1 a,
dataset2 b
a.col1 <= b.col2")

但是,有没有办法在没有 sqldf 的情况下做到这一点?

到目前为止,我只能看到基于特定公共列上的简单连接的合并函数。

谢谢!

【问题讨论】:

看看这个问题:***.com/questions/18840410/… 我相信答案适用。 a.col1 之前的词 on 缺失。 【参考方案1】:

最近在 data.table 中实现了非 equi(或条件)联接,并且在当前的开发版本 v1.9.7 中可用。请参阅安装说明here。

require(data.table) # v1.9.7+
setDT(dataset1) # convert to data.tables
setDT(dataset2)
dataset1[dataset2, on=.(col1 < col2), nomatch=0L]

对于dataset2 的每一行,在加入on 参数的条件时查找匹配的行索引,并返回这些匹配行的所有列。

【讨论】:

【参考方案2】:

我遇到过几次这个问题,我想我使用dplyr 找到了解决方案!就效率而言,它可能不是最好的,但它确实有效。我假设您在每种情况下都有一个名为“dummy”的常量变量(或者,它可以是另一个要加入的变量)。此外,我假设 dataset1 的列是 a_colj,dataset2 的列是 b_colj:

dataset1 %>%
    inner_join(dataset2, by='dummy') %>%
    filter(a_col1 <= b_col2)

【讨论】:

【参考方案3】:

您绝对可以使用merge 分两步完成。

示例(合并的具体细节由您决定):

lessRows <- which(df1$col1 < df2$col2)
df3 <- merge(df1, df2)[lessRows, ]

【讨论】:

以上是关于根据不等式条件连接两个数据集的主要内容,如果未能解决你的问题,请参考以下文章

三角形不等式。这个怎么用?

有条件地匹配两个大型数据集的多列中的元素

R语言统计(02)——合并不等数据矩阵

霍夫丁不等式与真实的机器学习

一文理解拉格朗日对偶和KKT条件

优化问题