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

时间:2015-10-01 17:02:35

标签: r join merge dataset sqldf

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

library(sqldf)

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

但是,有没有办法可以在没有 sqldf 的情况下执行此操作?

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

谢谢!

3 个答案:

答案 0 :(得分: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参数的条件下连接时查找匹配的行索引,并返回那些匹配行的所有列。

答案 1 :(得分:0)

您绝对可以使用div.indexcontent { vertical-align: top; width: 970px; } // Added these styles div.left-wrapper { float:left; width:660px; } // Change width to 100% div.newsext { text-align: left; clear: none; width: 100%; float: left; border-width: 7px 7px 7px 7px; border-image: url("images/boxborder3.png") 7 7 7 7 round; } // Change width to 100% div.indexforumext { text-align: left; width: 100%; float: left; border-width: 7px 7px 7px 7px; border-image: url("images/boxborder3.png") 7 7 7 7 round; } div.newshead{ background-image: url("images/divhead.png"); background-color: #0e141f; background-repeat: no-repeat; padding-left: 5px; display: inline; } div.newscontent { background-image: url("images/cbox.png"); background-color: #0e141f; background-repeat: no-repeat; padding: 10px; } div.rightbox { width: 250px; float: left; border-width: 7px 7px 7px 7px; border-image: url("images/boxborder3.png") 7 7 7 7 round; } 分两步完成。

示例(合并的具体细节取决于您):

merge

答案 2 :(得分:0)

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

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