根据不等式条件连接两个数据集
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, ]
【讨论】:
以上是关于根据不等式条件连接两个数据集的主要内容,如果未能解决你的问题,请参考以下文章